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.