Existem potencialmente duas perguntas aqui:
- Posso escrever scripts em várias variantes do shell e usá-los juntos?
- Posso escrever um script para uma variante de shell e executá-lo por outro interpretador de shell?
Para a primeira pergunta:
Sim, desde que os scripts sejam executados pelos interpretadores de shell para os quais foram escritos. Observe que não importa qual shell você usa para o trabalho interativo , contanto que os scripts possuam #!
linhas adequadas e / ou sejam executados com intérpretes explícitos (por exemplo, ksh myscript
).
Um script funciona como um comando que você (ou outra pessoa) escreveu. Outro script poderia chamá-lo não importando em qual idioma ele foi escrito (supondo que ele seja executável e tenha uma #!
-line correta).
Para o segundo:
Se você escreve seus scripts usando apenas o menor denominador comum em termos de sintaxe e gramática (que no caso destes três shells é POSIX sh
), você pode ter razoável certeza de que eles será executado sob todos esses shells (mas eu estou supondo que pode haver casos de borda onde a conformidade POSIX de um shell pode estar faltando). Mas por que você teria zsh
ou ksh
executando um script sh
quando você poderia executá-lo com /bin/sh
?
ksh93
e bash
(e possivelmente zsh
também, mas eu não sou muito versado nesse shell) oferecem um pouco de comunalidade em suas extensões para sh
No caso geral, não, você não pode presumir que um shell poderá executar com êxito e corretamente um script escrito para outro shell. Por exemplo, um script bash
poderia usar um script ksh
como se fosse qualquer outro comando, mas nunca deve source
a ksh
script.
Idealmente, você deve assumir que shells diferentes são linguagens de script completamente diferentes, e escrever para um shell em particular, assim como você não escreve um pedaço de código Python e espera que ele rode sob Perl ou Ruby (a menos que tenha sido algum ).