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

Table des matières:

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?

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

Vidéo: Quand est-il préférable d'utiliser #! / Bin / bash au lieu de #! / Bin / sh dans un script shell?
Vidéo: Invite de Commande Windows - Tutoriel Complet - YouTube 2024, Avril
Anonim
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 répond à la question d’un lecteur confus.
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 répond à 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:

When is it more appropriate to use #!/bin/bash rather than #!/bin/sh in a shell script?

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:

In short:

  • There are several shells which implement a superset of the POSIX sh specification. On different systems, /bin/sh might be a link to ash, bash, dash, ksh, zsh, etc. It will always be sh-compatible though, never csh or fish.
  • As long as you stick to sh features only, you can (and probably even should) use #!/bin/sh and the script should work fine, no matter which shell it is.
  • If you start using bash-specific features (i.e. arrays), you should specifically request bash because, even if /bin/sh already invokes bash on your system, it might not on everyone else’s system, and your script will not run there. The same applies to zsh and ksh, of course.
  • Even if the script is for personal use only, you might notice that some operating systems change /bin/sh during upgrades. For example, on Debian it used to be bash, but was later replaced with the very minimal dash. Scripts which used bashisms but had #!/bin/sh suddenly broke.

However:

  • Even #!/bin/bash is not that correct. On different systems, bash might live in /usr/bin, /usr/pkg/bin, or /usr/local/bin.
  • A more reliable option is #!/usr/bin/env bash, which uses $PATH. Although the env tool itself is not strictly guaranteed either, /usr/bin/env still works on more systems than /bin/bash does.

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

Conseillé: