it-swarm.com.de

"set -e -o pipefail" funktioniert nicht mit Bash-Skripten unter Ubuntu 16

Ich habe versucht, auf Ubuntu 16 ein Bash-Skript auszuführen, das ich auf CentOS 7 entwickelt habe.

Die erste Zeile des Skripts lautet:

set -o nounset -o pipefail -o errexit

Wenn ich versuche, dieses Skript auszuführen, wird folgende Fehlermeldung angezeigt:

project.sh: 6: set: Illegal option -o pipefail

Wie kann man dieses Problem lösen? Ich erkläre auch die Lösung in der Antwort auf diese Frage aber es hat nicht geholfen (meine Datei ist kein make).

6
DavideChicco.it

Unter Ubuntu ist die Standard-Shell dash (alias Debian Almquist Shell), zu der /bin/sh ein Symlink ist. Wenn Ihr Shell-Skript mit #!/bin/sh ausgeführt wird, versuchen Sie effektiv, es mit der Standard-Shell auszuführen. dash verfügt jedoch nicht über die Option pipefail, weshalb der Fehler angezeigt wird.

# 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
10