Movendo para zsh

Nov 28, 2021
admin

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 zshPonto
  • 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’ ), zshderives 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.

Deixe uma resposta

O seu endereço de email não será publicado.