Questão Em zsh como posso executar um script que é escrito para bash


Eu mudei para zsh, como posso executar um script que está escrito para bash?

Eu não quero modificar o script para colocar #! / Bin / bas no começo para o script, já que ele é controlado por versão.

Existe outro caminho?

A linha do script tendo problema é:

for f in `/bin/ls v/*/s.sh v/*/*/v.sh d/*/*/v.sh 2> /dev/null`

4


origem


Esta linha é terrível! É terrível bash prática para analisar a produção de ls. - gniourf_gniourf
Eu concordo com @gniourf_gniourf. Embora seja um pouco fora do escopo desta questão, seria melhor fazer isso: for f in v/*/s.sh v/*/*/v.sh d/*/*/v.sh (isso usa o built-glob-substituição de bash) - neersighted


Respostas:


Você pode executar o script com o bash manualmente:

bash myscript.sh

Uma solução melhor e mais permanente (que deveria estar lá em primeiro lugar) é adicionar uma linha de shabang:

#!/usr/bin/env bash

Depois que essa linha for adicionada, você poderá executá-la diretamente, mesmo no ZShell:

% ./myscript.sh

No que diz respeito ao controle de versão, você deve comprometer essa linha, para o bem de todos os desenvolvedores envolvidos.


10



Acordado - um script que requer bash, mas não inicia com um shebang bash, deve ser considerado quebrado. E scripts quebrados devem ser corrigidos. (Embora como @gniourf_gniourf apontou, esse não é o único problema aqui.) - Gordon Davisson
Enquanto estivermos no assunto de shebangs: por que não corrigir #!/usr/bin/env bash. Dessa forma, os scripts funcionam em mais sistemas. (/ usr / local / bin / bash, / usr / bin / bash etc são todos codificados e você precisa corrigir cada script para cada shell que você usa. Com env você só precisa manter um único programa). - Hennes