Posso combinar o ksh / zsh e outros shells com o Bash no mesmo fluxo de trabalho?

1

Posso combinar ksh / zsh e outros shells com o Bash no mesmo fluxo de trabalho (sessão do shell)?

Estou acostumado a Bash, mas talvez precise de algum comportamento disponível em ksh ou zsh. Eu poderia usar o Bash com eles, em uma única sessão de shell, pelo menos onde eles não se chocam?

Não há problema para resolver aqui, apenas uma questão de arquitetura para conhecer melhor as relações entre as conchas e o conhecimento geral.

    
por user9303970 24.02.2018 / 18:49

2 respostas

3

Existem potencialmente duas perguntas aqui:

  1. Posso escrever scripts em várias variantes do shell e usá-los juntos?
  2. 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 , mas há situações em que, mesmo que a sintaxe e a semântica pareçam estar de acordo, questões estranhas decorre de outras diferenças .

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 ).

    
por 24.02.2018 / 18:57
0

Como um exemplo simplista de afirmação:

$ echo $SHELL
/bin/bash
$ for othershell in ash dash posh rksh bash ksh zsh; 
  do 
    $othershell -c "echo Hello from the $othershell"; 
  done
Hello from the ash
Hello from the dash
Hello from the posh
Hello from the rksh
Hello from the bash
Hello from the ksh
Hello from the zsh
    
por 24.02.2018 / 18:57

Tags