Para portabilidade, não. Enquanto zsh
pode ser compilado em qualquer Unix ou Unix-like e até mesmo Windows pelo menos via Cygwin, e é empacotado para a maioria dos programas de código aberto e vários comerciais, geralmente não é incluído na instalação padrão.
bash
na outra extremidade está instalado em sistemas GNU (como bash
é o shell do projeto GNU) como a grande maioria de sistemas baseados em Linux não embarcados e algumas vezes em sistemas não-GNU como o Apple OS / X. No lado comercial do Unix, o shell Korn (a variante AT & T, embora mais o ksh88
one) é a norma e os dois bash
e zsh
estão em pacotes opcionais. Nos BSDs, o shell interativo preferido é geralmente tcsh
, enquanto sh
é baseado no shell Almquist ou pdksh
e bash
ou zsh
também precisam ser instalados como pacotes opcionais.
zsh
é instalado por padrão no Apple OS / X. Ele costumava ser o /bin/sh
lá. Ele pode ser encontrado por padrão em algumas distribuições do Linux, como SysRescCD, Grml, Gobolinux e provavelmente outras, mas eu não acho nenhuma das principais.
Assim como para bash
, há a questão da versão instalada e, como conseqüência, dos recursos disponíveis. Por exemplo, não é incomum encontrar sistemas com bash3
ou zsh3
. Além disso, não há garantia de que o script que você escreve agora para zsh5
funcionará com zsh6
, embora, como por bash
, eles tentem manter a compatibilidade com versões anteriores.
Para scripts, minha visão é: use a sintaxe do shell POSIX como todos os Unices têm pelo menos um shell chamado sh
(não necessariamente em /bin
) que é capaz de interpretar essa sintaxe. Então você não precisa se preocupar tanto com a portabilidade. E se essa sintaxe não for suficiente para sua necessidade, provavelmente você precisará de mais de um shell.
Então, suas opções são:
- Perl, que é onipresente (embora você precise limitar-se ao conjunto de recursos de versões antigas e não pode fazer suposições sobre os módulos Perl instalados por padrão)
- Especifique o interpretador e sua versão (python 2.6 ou superior, zsh 4 ou superior, bash 4.2 ou superior ...), como uma dependência para seu script, construindo um pacote para cada sistema de destino que especifica a dependência ou estipulando-o em um arquivo README enviado ao lado do seu script ou incorporado como comentários na parte superior do script ou adicionando algumas linhas na sintaxe Bourne no início do script, que verifica a disponibilidade do intérprete solicitado e sai com um erro explícito quando não é, como este script precisa de zsh 4.0 ou superior .
- Envie o intérprete ao lado do seu script (cuidado com as implicações de licenciamento), o que significa que você também precisa de um pacote para cada sistema operacional visado. Alguns intérpretes facilitam o fornecimento de uma maneira de empacotar o script e seu interpretador em um único executável.
- Escreva em uma linguagem compilada. Mais uma vez, um pacote por sistema direcionado.