Généralement, les scripts shell contiennent le commentaire suivant sur la première ligne du fichier de script :#!/bin/sh
. Selon les recherches que j'ai faites, cela s'appelle "hash bang" et c'est un commentaire conventionnel. Ce commentaire informe Unix que ce fichier est exécuté par le Bourne Shell sous le répertoire /bin
.
Ma question commence par ce point. Jusqu'à présent, je n'ai pas vu ce commentaire comme #!/bin/bash
. C'est toujours #!/bin/sh
. Cependant, les distributions Ubuntu n'ont pas le programme Bourne Shell. Ils ont le Bourne Again Shell (bash).
À ce stade, est-il correct de placer le commentaire #!/bin/sh
dans les scripts shell écrits dans les distributions Ubuntu ?
Réponse acceptée :
#!/bin/sh
devrait fonctionner sur toutes les distributions Unix et de type Unix. Il est généralement considéré comme le hashbang le plus portable tant que votre script reste conforme à POSIX. Le /bin/sh
shell est censé être un shell qui implémente la norme shell POSIX, quel que soit le shell réel qui se fait passer pour /bin/sh
coque.
#!/bin/sh
est normalement juste un lien maintenant car le shell Bourne n'est plus maintenu. Sur de nombreux systèmes Unix /bin/sh
sera un lien vers /bin/ksh
ou /bin/ash
, sur de nombreux systèmes Linux basés sur RHEL, ce sera un lien vers /bin/bash
, cependant sur Ubuntu et de nombreux systèmes basés sur Debian, il s'agit d'un lien vers /bin/dash
. Tous les shells, lorsqu'ils sont appelés en tant que sh
, entrera en mode de compatibilité POSIX.
Le hashbang est cependant un espace réservé important car il permet une portabilité beaucoup plus grande que les autres méthodes, tant que votre script est strictement conforme à POSIX (répété pour souligner l'importance).
Remarque :Lorsque bash
est invoqué en mode POSIX, il autorisera toujours certaines choses non POSIX comme [[
, tableaux, etc. Ces choses peuvent échouer sur un non-bash
système.