Movendo para zsh
Apple anunciou que em macOS 10.15 Catalina a shell padrão será zsh
.
Nesta série, vou documentar minhas experiências movendo bash
configurações e scripts para zsh
.
- Parte 1: Mover para zsh (este artigo)
- Parte 2: Ficheiros de configuração
- Parte 3: Opções da Shell
- Parte 4: Aliases e funções
- Parte 5: Complementos
- Parte 6: Personalizar o
zsh
Ponto - Parte 7: Miscelânea
- Parte 8: Scripting
zsh
zsh
(Acredito que é pronunciado zee-shell, embora zish seja divertido de dizer) terá sucesso bash
como a shell padrão. bash
tem sido a shell padrão desde Mac OS X 10.3 Panther.
Esta série cresceu e tornou-se um livro: retrabalhado e expandido com mais detalhes e tópicos. Como meus outros livros, eu planejo atualizar e adicionar a ele também após o lançamento, mantendo-o relevante e útil. Você pode encomendá-lo na Apple Books Store agora.
Porquê?
O bash
pacote binário com macOS está preso na versão 3.2 há muito tempo. bash
v4 foi lançado em 2009 e bash
v5 em janeiro de 2019. A razão pela qual a Apple não mudou para estas novas versões é que elas estão licenciadas com a GPL v3. bash
v3 ainda é a GPL v2.
zsh
, por outro lado, tem uma licença ‘MIT-like’, o que torna muito mais palatável para a Apple incluir no sistema por padrão. zsh
está disponível como no macOS há muito tempo. A versão zsh
no macOS 10.14 Mojave é bastante nova (5.3). macOS 10.15 Catalina tem o actual zsh
5.7.1.
Desaparece!?
No.
macOS Catalina ainda tem o mesmo /bin/bash
(versão 3.2.57) que o Mojave e versões anteriores do MacOS. Esta alteração é apenas para as novas contas criadas em macOS Catalina. Quando você atualizar para Catalina, o shell padrão de um usuário permanecerá o que era antes.
Muitos scripts em macOS, sistemas de gerenciamento, e a Apple e instaladores de terceiros confiam em /bin/bash
. Se a Apple acabou de arrancar este binário em macOS 10.15 Catalina ou mesmo 10.16. Muitos instaladores e outras soluções quebrariam e simplesmente deixariam de funcionar.
Utilizadores que têm /bin/bash
como shell padrão em Catalina verão um prompt no início de cada sessão do Terminal dizendo que zsh
é agora o shell padrão recomendado. Se você quiser continuar usando /bin/bash
, você pode suprimir esta mensagem definindo uma variável de ambiente no seu .bash_profile
ou .
export BASH_SILENCE_DEPRECATION_WARNING=1
Você também pode baixar e instalar uma versão mais nova de bash você mesmo. Tenha em mente que instalações personalizadas de bash residem em um diretório diferente, normalmente /usr/local/bin/bash
.
Bash permanecerá indefinidamente?
Aplicar é uma mensagem forte de que você deve trocar de shells. Isto é diferente da última troca no Mac OS X 10.3 Panther, quando a Apple mudou o padrão para bash
, mas não se importou se você permaneceu em tcsh
. Na verdade, tcsh
ainda está presente em macOS.
As mensagens da Apple devem nos dizer, que os dias de /bin/bash
estão numerados. Provavelmente não muito em breve, mas eventualmente manter uma versão com mais de dez anos de bash
no sistema se transformará em um passivo. A bash incorporada teve que ser corrigida em 2014 para mitigar a vulnerabilidade do ‘Shellshock’. Em algum momento a Apple irá considerar o custo de manutenção contínua muito alto.
Outra pista é que uma nova shell apareceu no MacOS Catalina (e é mencionada no artigo de suporte). O ‘Debian Almquist Shell’ dash
foi adicionado ao alinhamento de shells. dash
foi projetado para ser uma implementação mínima do shell padrão Posix sh
. Até agora, em macOS (incluindo Catalina),sh
invoca bash
em sh
modo de compatibilidade.
Como o artigo de suporte da Apple menciona, Catalina também adiciona um novo mecanismo para usuários e administradores para alterar qual shell lida com sh
invocações. MacAdmins ou usuários podem alterar o link simbólico armazenado em /var/select/sh
para apontar para uma shell diferente de /bin/bash
. Isto altera qual shell interpreta os scripts com #!/bin/sh
shebang ou scripts invocados com sh -c
. Alterar o interpretador para sh
não deve, mas pode alterar o comportamento de vários scripts cruciais no sistema, ferramentas de gerenciamento e em instaladores, mas pode ser muito útil para fins de teste.
Todas essas alterações são indicadores que a Apple está se preparando para remover /bin/bash
em algum momento, porém indeterminado, no futuro.
Preciso esperar a Catalina mudar para zsh?
Não, zsh
está disponível Mojave e em versões mais antigas do MacOS. Você pode começar a testar zsh
ou até mesmo mudar o seu shell padrão já.
Se você quiser apenas ver como zsh
funciona, você pode apenas abrir o Terminal e digitar zsh
:
$ zshMacBook%
A principal mudança que você verá é que o prompt parece diferente. zsh
usa o caractere %
como prompt padrão. (Você pode alterar isso, é claro.) A maioria das teclas de navegação e outros comportamentos permanecerão os mesmos que em bash
.
Se você já quiser mudar sua shell padrão para zsh
você pode usar o comando chsh
comando:
$ chsh -s /bin/zsh
Isto irá pedir a sua senha. Este comando não irá alterar a shell actual, mas todas as novas shells, por isso feche as janelas e separadores do Terminal actual e abra uma nova.
Como é diferente o zsh?
Like bash
(‘Bourne again shell’ ), zsh
derives da família de shells ‘Bourne’. Devido a esta ancestralidade comum, comporta-se de forma muito semelhante no uso diário. A mudança mais óbvia será o prompt diferente.
A principal diferença entre bash
e zsh
é a configuração. Como zsh
ignora os ficheiros de configuração de bash
(.bash_profile
ou ) não pode simplesmente copiar as configurações de bash personalizadas para zsh
. zsh
tem muito mais opções e pontos a alterar zsh
configuração e comportamento. Existe todo um eco-sistema de ferramentas de configuração e temas chamado oh-my-zsh
que é muito popular.
zsh
também oferece uma melhor configuração para auto-completar que é muito mais fácil do que em bash
.
Eu estou planejando um post separado, descrevendo como transferir (e traduzir) suas configurações de bash
para zsh
.
E que tal scripting?
Desde que zsh
está presente no macOS há muito tempo, você poderia começar a mover seus scripts de bash
para zsh
imediatamente e não perder a compatibilidade para trás. Lembre-se apenas de definir o shebang nos seus scripts para #!/bin/zsh
.
Vai ganhar algumas funcionalidades onde zsh
é superior a bash
v3, tais como arrays e arrays associativos (dicionários).
Há uma excepção onde eu recomendaria agora o uso de /bin/sh
para os seus scripts: o sistema Recovery não contém a shell /bin/zsh
, mesmo na Catalina beta. Isto ainda pode mudar durante a fase beta, ou mesmo mais tarde, mas depois ainda tem de considerar instalações macOS mais antigas onde zsh
não está definitivamente presente no Recovery.
Quando planeia utilizar os seus scripts ou pkgs com scripts de instalação num contexto Recovery (ou NetInstall, ou drive USB de arranque), como o Twocanoes MDS, installr ou bootstrappr, então não pode confiar em /bin/zsh
.
Desde que agora sabemos que bash
está eventualmente a desaparecer, a única escolha comum que resta é /bin/sh
.
Quando constrói um pacote instalador, pode ser difícil antecipar todos os contextos em que ele pode ser implementado. Assim, para scripts de instalação pré e pós-instalação, eu recomendaria usar /bin/sh
como o shebang de agora em diante.
Eu costumava recomendar usar /bin/bash
para tudo relacionado ao MacAdmin. /bin/sh
é definitivamente um passo abaixo na funcionalidade, mas parece ser a escolha mais segura para suporte continuado.
Sumário
Overall, enquanto o envio de mensagens da Apple é muito interessante, a mudança em si é menos dramática que as manchetes. A Apple não está ‘substituindo’ bash
por zsh
, pelo menos ainda não. No geral, teremos que repensar e reaprender algumas coisas, mas também há muito a ganhar se finalmente mudarmos de uma shell com dez anos para uma nova moderna!
Next
Na próxima parte vamos olhar para os arquivos de configuração de zsh
.