Question Dans zsh, comment puis-je exécuter un script écrit pour bash


Je suis passé à zsh, comment puis-je exécuter un script écrit pour bash?

Je ne veux pas modifier le script pour mettre #! / Bin / bash au début du script car il est contrôlé par la version.

Y a-t-il une autre façon?

La ligne du script qui pose problème est la suivante:

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

4
2017-12-21 19:06


origine


Cette ligne est terrible! C'est une pratique de bash terrible pour analyser la sortie de ls. - gniourf_gniourf
Je suis d'accord avec @gniourf_gniourf. Bien que ce soit un peu en dehors de la portée de cette question, vous feriez mieux de le faire: for f in v/*/s.sh v/*/*/v.sh d/*/*/v.sh (cela utilise la substitution globale de bash) - neersighted


Réponses:


Vous pouvez exécuter le script avec bash manuellement:

bash myscript.sh

Une solution meilleure et plus permanente (qui aurait dû être là au départ) est d'ajouter une ligne de shabang:

#!/usr/bin/env bash

Une fois cette ligne ajoutée, vous pouvez l'exécuter directement, même dans ZShell:

% ./myscript.sh

En ce qui concerne le contrôle de version, vous devez valider cette ligne, pour le bien de tous les développeurs impliqués.


10
2017-12-21 19:08



D'accord - un script qui nécessite bash, mais ne commence pas par un bash shebang, doit être considéré comme cassé. Et les scripts cassés doivent être corrigés. (Bien que @gniourf_gniourf ait souligné, ce n’est pas le seul problème ici.) - Gordon Davisson
Tant que nous sommes sur le sujet des shebangs: pourquoi ne pas corriger #!/usr/bin/env bash. De cette façon, les scripts fonctionnent sur plus de systèmes. (/ usr / local / bin / bash, / usr / bin / bash etc sont tous codés en dur et vous devez corriger chaque script pour chaque shell que vous utilisez. Avec env, vous ne devez gérer qu'un seul programme). - Hennes