J'ai installé le sous-système Windows pour Linux sur mon ordinateur Windows 10, qui est supposé émuler Ubuntu 16.04. Lorsque j'essaie d'exécuter un script comportant les 2 lignes suivantes en haut du script, cela me donne l'erreur :invalid option name set: pipefail
Lignes de script:
#!/bin/bash
set -eo pipefail
Ce script fonctionne correctement sur mon Mac et sur un système CentOS que je possède. J'ai vérifié (et vérifié) mon shell Ubuntu pour m'assurer qu'il prend en charge l'option pipefail de bash en exécutant set -o
.
Le résultat de cat -net /path/to/myscript
est:
#!/bin/bash^M$
set -eo pipefail^M$
Cette question était marquée comme une copie de "Comment changer la fin de ligne de Windows en version Unix", mais je ne pense pas que cela en fasse une duplication, car je ne savais pas personnellement que le problème que je rencontrais (ce qui est décrit dans ma question) était causé par le type de fin de ligne dans mon script Shell. La réponse à chacune des questions est la même mais deux questions différentes ont été posées.
Comme indiqué par les séquences ^M
dans votre sortie cat -net
, vous avez enregistré le script avec des fins de ligne de style Windows (CRLF) plutôt que de style Unix (LF uniquement).
En fait, nous aurions pu le deviner à partir du message d'erreur tronqué: l'erreur "réelle" est que pipefail\r
est un nom d'option non valide. Toutefois, le retour à la ligne amène le curseur à revenir au début de la ligne et à remplacer les caractères précédents. Comparer
$ cat -net bad.sh
1 #!/bin/bash$
2 set -eo fhqwhgads$
$ ./bad.sh
./bad.sh: line 2: set: fhqwhgads: invalid option name
et
$ cat -net bad.sh
1 #!/bin/bash$
2 set -eo pipefail^M$
$ ./bad.sh
: invalid option name: pipefail