Existe algum motivo para usar o bash over zsh? [fechadas]

33

Estou curioso sobre por que alguém iria querer executar bash em vez de zsh. Quero dizer, o zsh é totalmente compatível com o bash. Não me entenda mal: eu não desgosto bash ou qualquer coisa. Eu só quero saber se há alguma vantagem em usá-lo em zsh.

Então, qual é a razão para usar o bash over zsh?

    
por Jason Baker 11.12.2009 / 14:33

8 respostas

29

Duas razões vêm à mente:

Primeiro - está disponível praticamente em todos os lugares. Eu tenho vários sistemas Linux (CentOS 4.x neste caso) que não possuem zsh instalado. Da mesma forma, tenho que tocar em sistemas antigos, como o Solaris 2.6 e superior, o HP-UX 10 e versões mais recentes do AIX. Portanto, eu praticamente tenho que usar bash nesses computadores, o que eu faço porque eu toco dúzias, se não centenas, de computadores individuais ao longo de um mês, e para obter consistência em sua interface você acaba ficando preso usando o padrões.

Segundo - está disponível praticamente em todo lugar. Isso significa que posso escrever um script de shell bash e ter 99% de certeza de que ele funcionará quando transferido para outro lugar.

Sim, essas razões são superficialmente as mesmas, mas o raciocínio por trás delas é diferente.

    
por 11.12.2009 / 14:39
24

O Bash geralmente vem com todos os sistemas, o zsh não. Eu amo zsh, mas por causa disso, eu uso zsh para uso interativo, mas Bash para todos os meus scripts .

Acho que isso mantém tudo mais simples, pois mesmo quando eu compro qualquer que seja o bash compatível (setopt SH_WORD_SPLIT?), ainda me deparo com diferenças sutis.

    
por 11.12.2009 / 14:40
13

O zsh não é totalmente compatível com o bash. Existem várias diferenças. O zsh mais recente é mais compatível com o bash (= ~ supported, exec agora possui as opções extra flag, etc), mas a compatibilidade total não é uma meta, nem mesmo em "emular".

Por exemplo, a substring bash é $ {foo: offset: len}, mas em zsh é $ foo [start, end] e isso é apenas um exemplo simples.

zsh é um shell influenciado por tcsh e ksh que faz muitas coisas do seu jeito; A compatibilidade POSIX não é explicitamente uma meta, mas os desenvolvedores respondem a patches que adicionam opções / emulam comportamentos que aproximam as coisas do POSIX. Mas quando você começa realmente a entrar no poder do shell, você começa a criar scripts somente para escrita, mais até do que o bash.

bash é o POSIX sh + ksh + pedantismo, com alguns recursos agora copiados do zsh. Ele também tem scripts somente de escrita, mas porque tem operadores menos poderosos, você acaba não usando a concisão do zsh e as coisas podem ser mais legíveis (exceto por todas as citações para evitar a divisão do espaço em branco, o < em> estúpido ksh-style $ array significa first-element-of-array, não all-elements-of-array, etc etc).

Escrever scripts que tiram o máximo proveito do poder de qualquer shell é imprudente, a menos que você esteja em um ambiente restrito (por exemplo, escrevendo scripts rc do sistema, onde alguns FSs podem não ser montados, etc). Como um ideal, use Perl / Python / Ruby / o que for para algo grande o suficiente para que você precise de expressividade não em Bourne sh, se você quiser que outros possam mantê-lo. Mantenha o material da shell para coisas relacionadas ao shell interativo (programação de conclusão de tabulação, etc.).

Eu não usaria o bash sobre o zsh. Eu usaria sh simples sobre zsh para scripts simples, ou mudaria para uma linguagem onde os arrays associativos tivessem operadores decentes (ao contrário de zsh, onde eles são, novamente, 'concisos'). Eu posso mudar um script sh para bash se eu precisar desse pequeno recurso para estender um script já existente e não ter tempo para reescrevê-lo agora.

    
por 02.01.2010 / 03:58
6

Meu conselho: se você está indo para a portabilidade absoluta, escreva usando as regras do shell Bourne, nem se preocupe com as extensões do shell Korn. Como mencionado, existem algumas "caixas grandes" antigas que não possuem nenhum shell GNU.

Bash já faz "muito". Eu tenho um amigo no trabalho que prefere o zsh, mas não sei exatamente o que ele faz.

De qualquer forma, escreva para shell Bourne (ou "bourne again") ou, alternativamente, se você estiver fazendo um script personalizado para um pequeno número de caixas específicas, pule "shell hell" por completo e apenas escreva perl ou python (ou qualquer que seja o seu intérprete localmente instalado favorito).

    
por 11.12.2009 / 16:58
5

Além do motivo de portabilidade dado acima, outro talvez seja que o bash ainda está adicionando recursos.

Por exemplo, bash v4.x + introduzido:

  • globalização recursiva:

    rm -f **/*.log

  • autocd:

    Type "/tmp" instead of "cd /tmp"

por 16.08.2012 / 03:32
5

By the way, you have been told here many times that bash is found practically everywhere, so use it to write portable scripts, which is false.

Bobagem. Se você sabe que todo sistema de que você gosta tem BASH, então é uma afirmação perfeitamente razoável. O BASH tem muitos recursos úteis que não podem ser razoavelmente emulados no POSIX sh. O uso frívolo de recursos não POSIX não é uma ótima idéia, mas usá-los quando você realmente precisa deles é bom.

A portabilidade não é absoluta. É discutível até onde você precisa, como qualquer outra coisa. Por exemplo, o Fedora usa comandos shell para construir pacotes RPM e as diretrizes de empacotamento do Fedora afirmam que como todos os pacotes devem ser construídos nativamente no Fedora, não há problema em usar todos os recursos do BASH. Embora teoricamente outras distros sem o BASH possam querer reutilizar seus RPMs de origem, eles tomaram uma decisão sobre a portabilidade baseada na praticidade em vez do seu mantra "SEMPRE UZE POSIX !! 1".

O ZSH não é conhecido como shell padrão, simplesmente porque é uma bagunça de idéias incompletas.

    
por 05.10.2012 / 04:23
2

A propósito, você foi informado aqui muitas vezes que bash é encontrado praticamente em todo lugar, então use-o para escrever scripts portáveis, que é falso .

O jeito certo de escrever scripts unix portáveis é usar sh , que é encontrado em todo sistema * nix .

Todos os outros shell, exceto sh , são apenas uma ferramenta interativa diária sua.

Quando chegar a bash vs zsh - bash é empacotado em mais *nixes do que zsh , existem desvantagens de instalar software adicional no sistema - você precisa mantê-lo. Algumas pessoas adoram zsh "recursos legais", então eles gostam de pagar esse preço, outros não.

    
por 21.08.2012 / 13:31
2

Outro ponto:

Muitos programas fornecem conclusão bacana por padrão. Para mim, é a razão para não mudar.

[adicionado em julho de 2013] Bem, depois de alguns anos de uso do zsh desde o comentário acima, eu tenho que dizer que a conclusão da tabulação (mesmo construída em um, com / sem modificações de 3-parety) é brilhante e parece que está muito além da oferecida pelo bash. :).

    
por 11.12.2009 / 15:18