Estou curioso para saber por que alguém iria querer executar o bash em vez do zsh. Quero dizer, o zsh é totalmente compatível com o bash. Não me interpretem mal: eu não gosto de bash ou qualquer coisa. Eu realmente quero saber se existem vantagens em usá-lo no zsh.
Então, qual o motivo para usar o bash sobre o zsh?
Respostas:
Duas razões vêm à mente:
Primeiro - está disponível praticamente em qualquer lugar. Eu tenho vários sistemas Linux (CentOS 4.x nesse caso) que não possuem o zsh instalado. Da mesma forma, eu tenho que tocar em sistemas antigos como Solaris 2.6 e versões posteriores, HP-UX 10 e versões posteriores e igualmente barulhentas do AIX. Portanto, eu praticamente preciso usar o bash nesses computadores, o que uso porque toco dezenas, senão centenas, em computadores individuais ao longo de um mês. Para obter consistência na interface, você acaba ficando preso usando o padrões.
Segundo - está disponível praticamente em qualquer lugar. Isso significa que posso escrever um script shell bash e ter 99% de certeza de que funcionará quando transferido para outro lugar.
Sim, esses motivos são superficialmente os mesmos, mas o raciocínio por trás deles é diferente.
fonte
O Bash geralmente vem com todos os sistemas, o zsh não. Eu amo o zsh, mas, por causa disso, uso o zsh para uso interativo, mas o Bash para todos os meus scripts .
Acho que isso mantém tudo mais simples, pois mesmo quando compro o que for compatível com o bash (defina SH_WORD_SPLIT?), Ainda encontro diferenças sutis.
fonte
O zsh não é totalmente compatível com o bash. Há uma variedade de diferenças. O zsh mais recente é mais compatível com o bash (= ~ suportado, o exec agora tem as opções extras de sinalização, etc.), mas a compatibilidade total não é uma meta, nem mesmo em "emular".
Por exemplo, o bash substring é $ {foo: offset: len}, mas no zsh é $ foo [start, end] e esse é apenas um exemplo simples.
zsh é um shell influenciado pelo tcsh e pelo ksh, que faz muitas coisas à sua maneira; A compatibilidade do POSIX não é explicitamente uma meta, mas os desenvolvedores respondem aos patches que adicionam opções / emulam o comportamento que aproxima as coisas do POSIX. Mas quando você começa a realmente explorar o poder do shell, começa a criar scripts somente para gravação, mais ainda do que o bash.
O bash é POSIX sh + ksh + pedanticismo, com alguns recursos agora copiados do zsh. Ele também possui scripts somente de gravação, mas como possui 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 estúpido array $ do estilo ksh significa primeiro elemento da matriz, não todos os elementos da matriz, 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 estar montados, etc.). Como ideal, use Perl / Python / Ruby / qualquer coisa grande o suficiente para que você não precise da expressividade do Bourne sh, se quiser que outros consigam mantê-la. Mantenha o material do shell para itens relacionados ao shell interativo (programação de conclusão de guias, etc).
Eu não usaria bash sobre zsh. Eu usaria o sh over zsh simples para scripts simples ou alternaria para uma linguagem em que matrizes associativas tenham operadores decentes (ao contrário do zsh, onde eles são novamente 'concisos'). Eu posso mudar um script sh para bash se precisar desse pequeno recurso para estender um script de trabalho comprovado existente e não tiver tempo para reescrevê-lo agora.
fonte
Meu conselho: se você estiver buscando 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" mais antigas que não possuem shell GNU nelas.
O Bash já faz "demais". Tenho um amigo no trabalho que prefere o zsh, mas não sei exatamente o que ele faz.
De qualquer forma, escreva para o shell Bourne (ou "bourne again") ou, alternativamente, se você estiver criando um script personalizado para um pequeno número de caixas específicas, pule "shell hell" completamente e escreva usando perl ou python (ou qualquer outra coisa) seu intérprete instalado localmente favorito é).
fonte
Além do motivo de portabilidade indicado acima, outro pode ser que o bash ainda está adicionando recursos.
Por exemplo, o bash v4.x + introduzido:
globbing recursivo:
autocd:
fonte
Absurdo. Se você sabe que todo sistema com o qual você se preocupa tem BASH, é uma afirmação perfeitamente razoável. O BASH possui 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 boa idéia, mas usá-los quando você realmente precisa deles é bom.
Portabilidade não é absoluta. É discutível até onde você precisa levá-lo, como qualquer outra coisa. Por exemplo, o Fedora usa comandos shell para criar pacotes RPM e as diretrizes de empacotamento do Fedora afirmam que, como todos os pacotes devem ser construídos nativamente no Fedora, é bom usar todos os recursos do BASH. Embora teoricamente outras distros sem o BASH possam querer reutilizar os RPMs de origem, eles tomaram uma decisão sobre portabilidade com base na praticidade, em vez de no seu mantra "SEMPRE UZE POSIX !! 1".
O ZSH não pegou como um shell padrão, simplesmente porque é uma bagunça enorme de idéias meio cozidas.
fonte
A propósito, você já foi informado aqui muitas vezes, que
bash
é encontrado praticamente em toda parte; portanto, use-o para escrever scripts portáteis, o que é falso .A maneira correta de escrever scripts unix portáteis é usar
sh
, o que é encontrado em todos os sistemas * nix .Todos os outros shell, exceto,
sh
são apenas uma ferramenta interativa diária sua.Quando se trata de
bash
vszsh
-bash
está incluído mais do*nixes
quezsh
, então aqui vêm as desvantagens de instalar software adicional no sistema - você precisa mantê-lo. Algumas pessoas adoram os "recursos legais" do zsh e gostam de pagar esse preço, outras não.fonte
sh
seja do bash, habilita o modo de compatibilidade quando executado comosh
.Outro ponto:
Muitos programas fornecem conclusão legal do bash por padrão. Para mim, é o motivo de não mudar.
[adicionado em julho de 2013] Bem, depois de alguns anos de uso do zsh desde o comentário acima, devo dizer que o preenchimento de tabulação (mesmo um incorporado, sem modificações de terceira paridade) é brilhante e parece muito além do oferecido pelo bash . :).
fonte