Je pense avoir configuré bash en tant que shell, mais pourquoi cela se produit-il ?
Mon shell est bash :
# ls -al `which sh`
lrwxrwxrwx 1 root root 4 Jul 12 03:25 /bin/sh -> bash
Erreur lors de l'exécution d'un script avec sh
# sh ubuntu/util.sh
ubuntu/util.sh: line 32: `test-build-release': not a valid identifier
Aucune erreur de bash
# bash ubuntu/util.sh
Réponse acceptée :
Il exécute l'exécutable bash que vous attendez, mais votre shell n'est pas simplement bash ; c'est bash qui s'exécute dans POSIX sh
le mode de compatibilité. Il le fait en regardant le nom de la commande sous laquelle il a été invoqué, et s'il s'agit de sh
, puis il active automatiquement le mode POSIX. Il fait un travail très terrible à cet égard et ne devrait pas être entièrement invoqué pour tester POSIX sh
scripts compatibles, mais cela devrait considérablement restreindre la syntaxe autorisée.
–posix
Modifiez le comportement de bash lorsque l'opération par défaut diffère de la norme POSIX pour correspondre à la norme (mode posix).
Voir VOIR AUSSI ci-dessous pour une référence à un document qui détaille comment le mode posix affecte le comportement de bash.
Et depuis http://tiswww.case.edu/php/chet/bash/POSIX :
Démarrer Bash avec le
--posix
option de ligne de commande ou en exécutantset
pendant que Bash est en cours d'exécution, Bash se conformera plus étroitement à la norme POSIX en modifiant le comportement pour qu'il corresponde à celui
-o posix
spécifié par POSIX dans les zones où la valeur par défaut de Bash diffère.Lorsqu'il est appelé en tant que
sh
, Bash passe en mode POSIX après avoir lu les fichiers
de démarrage.