Est-il un moyen de forcer un script shell à exécuter sous bash au lieu de sh?
J'ai été vues spectaculaires autour d'essayer de trouver ça, mais je ne pouvais pas trouver quelque chose hors de la main. Je suis sûr que la réponse est simple.
Je suis à l'écriture de scripts shell, à des fins diverses pour être exécuté par des personnes différentes, et certains d'entre eux peuvent appeler le script avec "sh" au lieu de "bash".
Le script contient des outils qui ne fonctionnent pas dans l'ordinaire de l'environnement de shell et de la nécessité bash - est-il un moyen de forcer le script à exécuter en vertu de bash, même si elle a été invoquée avec "sh"?
- Je pense que tu veux dire
/usr/bin/env
, pas/bin/env
; mon système, par exemple, n'ont pas/bin/env
. Voir aussi cette question et ma réponse. - Je crois que cette question est utile et peut encore respecter les règles, par exemple, n'est pas hors-sujet, si il a été reformulé de manière à simplement "Comment puis-je modifier mon script pour forcer l'exécution en vertu de bash, au lieu de sh?" (assez bien même que le titre)
Vous devez vous connecter pour publier un commentaire.
Comme Richard Pennington dit, la bonne façon de le faire est d'avoir
que la première ligne du script.
Mais cela ne va pas aider si les utilisateurs de l'appeler à l'aide
sh
explicitement. Par exemple, si je tapela
#!
ligne sera ignoré.Vous ne pouvez pas vraiment empêcher les gens de le faire, mais vous pouvez vous décourager, en ajoutant quelque chose comme cela au début du script:
Ou vous pourriez faire quelque chose comme:
mais cela pourrait très mal tourner très facilement; par exemple, il n'est probablement pas garanti que
$0
, qui est normalement le nom du script, est en fait un nom que vous pouvez utiliser pour appeler. Je peux imaginer ce que cela va dans une boucle infinie si vous vous trompez ou si votre système est légèrement mal configuré.Je recommande le message d'erreur approche.
(Note: j'ai juste édité cette réponse si le message d'erreur contient le nom du script, ce qui pourrait être utile pour les utilisateurs.)