Page d'accueil » comment » Quand est-il préférable d'utiliser #! / Bin / bash au lieu de #! / 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?

    Lorsque vous créez un nouveau script shell, vous voulez vous assurer qu'il est aussi simple que possible, mais il peut parfois être un peu déroutant de savoir quel shebang est le meilleur pour vous. Sur cette note, le post de SuperUser d'aujourd'hui a la réponse à la question d'un lecteur confus.

    La séance de questions et réponses d'aujourd'hui nous est offerte par SuperUser, une sous-division de Stack Exchange, un groupe de sites Web de questions-réponses dirigé par la communauté..

    La question

    Lecteur superutilisateur Hendre veut savoir quand il vaut mieux 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

    Grawity, contributeur au superutilisateur, a la solution pour nous:

    En bref:

    • Plusieurs shells implémentent un sur-ensemble de la spécification POSIX sh. Sur différents systèmes, / bin / sh pourrait être un lien vers ash, bash, dash, ksh, zsh, etc. Il sera toujours compatible sh, mais jamais csh ou fish.
    • Tant que vous vous en tenez aux fonctionnalités sh, vous pouvez (et même probablement devriez) utiliser #! / bin / sh et le script devrait fonctionner correctement, peu importe de quel shell il s'agit.
    • Si vous commencez à utiliser des fonctionnalités spécifiques à bash (c'est-à-dire des tableaux), vous devez spécifiquement demander bash car, même si / bin / sh appelle déjà bash sur votre système, il se peut que ce ne soit pas le cas sur tous les systèmes et que votre script ne soit pas exécuté là-bas. La même chose s'applique à zsh et ksh, bien sûr.
    • Même si le script est destiné uniquement à un usage personnel, vous remarquerez peut-être que certains systèmes d'exploitation changent. / bin / sh pendant les mises à niveau. Par exemple, sous Debian, il s’agissait de bash, mais a ensuite été remplacé par le tiret très minimal. Des scripts qui utilisaient des bashismes mais qui avaient #! / bin / sh soudain cassé.

    Toutefois:

    • Même #! / bin / bash n'est pas ce correct. Sur des systèmes différents, bash pourrait vivre 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 Est-ce que.

    Avez-vous quelque chose à ajouter à l'explication? Sound off dans les commentaires. Voulez-vous lire plus de réponses d'autres utilisateurs de Stack Exchange doués en technologie? Découvrez le fil de discussion complet ici.

    Crédit d'image: Wikipedia