30Jul

Quand est-il préférable d'utiliser #!/bin/ bash Au lieu de #!/bin/ sh dans un script Shell?

Lorsque vous créez un nouveau script shell, vous voulez vous assurer qu'il ne présente aucun problème, mais il peut parfois être un peu déroutant de savoir quel shebang est le meilleur pour vous. Sur cette note, SuperUser Q & A post d'aujourd'hui a la réponse à la question d'un lecteur confus.

Question d'aujourd'hui &La session de réponse nous est offerte par SuperUser, une subdivision de Stack Exchange, un regroupement communautaire de sites Web Q & A.

La question Lecteur

SuperUser Hendre veut savoir quand il est préférable d'utiliser #!/bin/ bash au lieu de #!/bin/ sh dans les scripts shell:

Quand est-il plus approprié d'utiliser #!/bin/ bash plutôt que #!/bin/ sh dans un script shell?

Quand est-il préférable d'utiliser #!/bin/ bash au lieu de #!/bin/ sh dans un script shell?

La réponse

SuperUser contributeur grawity a la réponse pour nous:

En résumé:

  • Plusieurs shells implémentent un surensemble de la spécification POSIX sh. Sur des systèmes différents, /bin/ sh pourrait être un lien vers ash, bash, dash, ksh, zsh, etc. Il sera toujours compatible avec les sh mais jamais avec csh ou fish.
  • Tant que vous vous en tenez aux caractéristiques sh seulement, vous pouvez( et probablement même devrait) utiliser #!/bin/ sh et le script devrait fonctionner correctement, quel que soit le shell.
  • Si vous commencez à utiliser des fonctionnalités spécifiques à bash( tableaux), vous devez demander spécifiquement bash car, même si /bin/ sh appelle déjà bash sur votre système, il peut ne pas fonctionner sur tout le système, et votre script ne s'exécutera pas. La même chose s'applique à zsh et ksh, bien sûr.
  • Même si le script est uniquement destiné à un usage personnel, vous remarquerez peut-être que certains systèmes d'exploitation modifient /bin/ et lors des mises à niveau. Par exemple, sur Debian, c'était bash, mais plus tard remplacé par le tiret minimal. Scripts qui utilisaient des bashismes mais avaient #!/bin/ sh soudainement cassé.

Cependant:

  • Même #!/bin/ bash n'est pas correct. Sur des systèmes différents, bash peut se trouver dans /usr/ bin , /usr/pkg/ bin ou /usr/local/ bin .
  • Une option plus fiable est #!/usr/bin/ env bash , qui utilise $ PATH .Bien que l'outil env lui-même ne soit pas strictement garanti non plus, /usr/bin/ env fonctionne toujours sur plus de systèmes que /bin/ bash .

Avoir quelque chose à ajouter à l'explication? Sonnez dans les commentaires. Vous voulez lire plus de réponses d'autres utilisateurs de Stack Exchange? Découvrez le fil de discussion complet ici.

Crédit d'image: Wikipedia