O que está em risco com a mudança para o ZSH?

4

A maioria dos conselhos para o Mac é escrita supondo que você use o shell Bash. Se eu mudar para o zsh, como me tornarei incompatível com os scripts Bash atuais que tenho no meu sistema, e os conselhos que as pessoas da SU me dão?

A linha #!/bin/sh no início dos meus scripts ajuda?

Editar: Irrelevante para a pergunta é por que eu quero fazer isso. Melhor conclusão de tabulação. Acabei de testar o zsh colocando um script de login como sugerido aqui e estou absolutamente deslumbrado.

    
por Dan Rosenstark 17.05.2010 / 01:42

5 respostas

4

A linha shebang que você mostra significa executar o script usando o shell Bourne (ou outro shell no modo de compatibilidade). Esses scripts provavelmente continuarão rodando usando o mesmo shell que eles estão agora se você mudar para o zsh como seu shell interativo. A única maneira que isso mudará é se você vincular sh a zsh , mas isso não deve mudar a funcionalidade.

Você encontrará uma certa quantidade de compatibilidade entre o zsh e o Bash quando usado como seu shell de login ou ao escrever scripts que chamem especificamente um ou outro usando linhas shebang como:

#!/usr/bin/bash

ou

#!/usr/bin/zsh

No entanto, existem muitas coisas que o zsh faz de forma diferente ou que o Bash não consegue fazer. O Bash é muito mais usado, então há menos pessoas familiarizadas com as complexidades do zsh. Informações sobre isso estão amplamente disponíveis, no entanto. Além disso, você verá que há mais do que a ajuda adequada disponível aqui.

Você verá que, para escrever scripts, o shell é consideravelmente mais poderoso que o shell Bourne ( sh ), mas às custas da portabilidade. Além disso, como o Bash é mais usado que o zsh, seus scripts são relativamente mais portáveis.

    
por 17.05.2010 / 01:58
4

Eu não sou um usuário zsh, mas pelo que li no SuperUser e em outros lugares, sempre tive a impressão de que seus fãs focam em seus recursos extras para uso interativo mais do que para scripts. A primeira sentença da descrição de zsh no site ZSH , ecoa essa ênfase nos recursos interativos: "Zsh é um shell projetado para interativos usar, embora seja também uma poderosa linguagem de script. "

Dito isto, se você está planejando mudar seu shell de login, você pode continuar escrevendo seus scripts no bash. Como outra resposta apontou, os scripts bash serão mais portáveis.

Os scripts existentes com o #!/bin/sh explícito (ou #!/bin/bash ou qualquer outro caminho) continuarão funcionando bem, independentemente do seu shell de login.

    
por 17.05.2010 / 05:04
3

Aqui você encontrará uma lista de " bashisms ", ou seja, pedaços de código que serão executados na concha bash mas não em outros shells compatíveis com bourne.

Se você deseja obter portabilidade máxima ao escrever scripts de shell, inicie o script com #!/bin/sh e evite "bashisms", para que ele seja executado em qualquer outro shell compatível com posix, como ksh ou zsh.

    
por 17.05.2010 / 06:48
1

/bin/sh aponta para o bash, executando-o no modo de compatibilidade. A única coisa que altera suas alterações no shell de login é quais recursos internos estão disponíveis e como eles funcionam. Os scripts seguem sua linha de shebang.

    
por 17.05.2010 / 01:54
1

Por "mudar para zsh", suponho que você quer dizer uma de duas coisas:

  • você usará chsh (ou equivalente) para alterar seu shell de login para zsh , ou
  • você irá configurar o Terminal (ou equivalente) para usar zsh como seu shell padrão.

A maioria dos programas shell (shell “scripts”) incluirá um “shebang” / “hash-bang”

Como várias outras respostas indicam, os programas shell que usam uma linha shebang não serão afetados pela seleção de shell de login do usuário, nem pelo shell interativo que é o pai ou pai-N de um programa shell lançado.

Se você está instalando uma nova versão do zsh e a incluindo no seu PATH, programas que usam um shebang como #!/usr/bin/env zsh usarão essa nova versão (quando são iniciados com um PATH que coloca o novo zsh primeiro). Isso só pode causar problemas se alguma alteração incompatível for feita entre a versão antiga / original do zsh e a nova. Note que este seria um problema intra- zsh (inter- zsh -versão), não o problema entre as consolas sobre o qual suspeito que esteja preocupado. Esta é geralmente uma categoria muito menor de erro do que se (por exemplo) você tentasse executar um programa bash com ksh .

O não uso de uma linha shebang não é inerentemente portátil entre os ambientes do usuário. O resultado de tentar executar um arquivo executável e não-binário que não possui um shebang depende do ambiente (SO, shell, possivelmente shell de login e variáveis de ambiente). Quando esse arquivo é executado no sistema Mac OS X 10.4, o comportamento varia de acordo com o shell que o executa. ksh e bash interpretam o arquivo em uma cópia bifurcada de si mesmos. zsh sempre passa para /bin/sh . Se algum programa tentasse exec diretamente, ele falharia com ENOEXEC (isso acontece dentro do shell, eles apenas “cobrem” por “executá-lo” de uma maneira alternativa). Eu tenho uma vaga lembrança de alguns sistemas antigos, mesmo tentando usar o shell de login do usuário nesta situação, mas minha busca rápida não revelou nada útil.

Um arquivo não-binário é um arquivo que o kernel não reconhece como um dos formatos de objeto binário suportados.

No que diz respeito à compatibilidade interativa, zsh suporta muito da sintaxe estendida de bash e ksh (alguns dos devem ser habilitados com No entanto, muitas das opções de shell encontradas no Super User funcionarão bem em zsh (mesmo que algumas delas sejam compostas por “bashisms”). Algumas coisas (ligações de edição de linha de comando, conclusão , exibições de prompt, etc.) são totalmente diferentes de bash e ksh e requerem uma sintaxe diferente para operações semelhantes.

zsh tem um pouco de bash compatibilidade de finalização, mas eu nunca tentei isso.

    
por 17.05.2010 / 11:00

Tags