J'ai essayé d'exécuter sur Ubuntu 16 un script bash que j'ai développé sur CentOS 7.
La première ligne du script est:
set -o nounset -o pipefail -o errexit
Lorsque j'essaie d'exécuter ce script, le message d'erreur suivant s'affiche:
project.sh: 6: set: Illegal option -o pipefail
Comment résoudre ce problème? J'ai aussi la solution expliquer dans le réponse à cette question mais cela n'a pas aidé (mon fichier n'est pas un make
).
Sur Ubuntu, le shell par défaut est dash
(aka Debian Almquist Shell), auquel /bin/sh
est un lien symbolique. Lorsque votre script Shell est exécuté avec #!/bin/sh
, vous essayez effectivement de l'exécuter avec le shell par défaut. Toutefois, dash
ne dispose pas de l'option pipefail
, raison pour laquelle vous obtenez le message d'erreur.
# Verifying what /bin/sh is symlinked to dash
$ ls -l /bin/sh
lrwxrwxrwx 1 root root 4 2月 17 2016 /bin/sh -> dash
# Verify that pipefail doesn't exist as option for dash
$ dash
$ set -o | grep pipefail
$ set -o pipefail
dash: 1: set: Illegal option -o pipefail
$ sh
$ set -o pipefail
sh: 1: set: Illegal option -o pipefail
# Try this same option in bash
$ bash --posix
bash-4.3$ set -o pipefail
bash-4.3$
# no error