Erstens befürchte ich, dass diese Erklärung der -o
Option von http://explainshell.com bereitgestellt wird wird, nicht ganz korrekt ist.
Da dies set
ein integrierter Befehl ist, können wir seine Dokumentation anzeigen, help
indem wir Folgendes ausführen help set
:
-o option-name
Set the variable corresponding to option-name:
allexport same as -a
braceexpand same as -B
emacs use an emacs-style line editing interface
errexit same as -e
errtrace same as -E
functrace same as -T
hashall same as -h
histexpand same as -H
history enable command history
ignoreeof the shell will not exit upon reading EOF
interactive-comments
allow comments to appear in interactive commands
keyword same as -k
monitor same as -m
noclobber same as -C
noexec same as -n
noglob same as -f
nolog currently accepted but ignored
notify same as -b
nounset same as -u
onecmd same as -t
physical same as -P
pipefail the return value of a pipeline is the status of
the last command to exit with a non-zero status,
or zero if no command exited with a non-zero status
posix change the behavior of bash where the default
operation differs from the Posix standard to
match the standard
privileged same as -p
verbose same as -v
vi use a vi-style line editing interface
xtrace same as -x
Wie Sie sehen können, -o pipefail
bedeutet dies:
Der Rückgabewert einer Pipeline ist der Status des letzten Befehls, der mit einem Status ungleich Null beendet wurde, oder Null, wenn kein Befehl mit einem Status ungleich Null beendet wurde
Aber es heißt nicht: Write the current settings of the options to standard output in an unspecified format.
Wird jetzt -x
zum Debuggen verwendet, wie Sie es bereits kennen, und -e
wird nach dem ersten Fehler im Skript nicht mehr ausgeführt. Betrachten Sie ein Skript wie dieses:
#!/usr/bin/env bash
set -euxo pipefail
echo hi
non-existent-command
echo bye
Die echo bye
Zeile wird niemals ausgeführt, wenn sie verwendet -e
wird, da
non-existent-command
keine 0 zurückgegeben wird:
+ echo hi
hi
+ non-existent-command
./setx.sh: line 5: non-existent-command: command not found
Ohne -e
die letzte Zeile würde gedruckt werden, da wir trotz eines Fehlers nicht angewiesen haben Bash
, automatisch zu beenden:
+ echo hi
hi
+ non-existent-command
./setx.sh: line 5: non-existent-command: command not found
+ echo bye
bye
set -e
wird häufig am Anfang des Skripts platziert, um sicherzustellen, dass das Skript angehalten wird, wenn der erste Fehler auftritt. Wenn beispielsweise das Herunterladen einer Datei fehlgeschlagen ist, ist es nicht sinnvoll, sie zu extrahieren.
set -uxo pipefail
).set -e
es würde nur dazu führen, dass das Skript bei einem Fehler beendet wird. In Ihrem Beispiel ist es nur eine von vielen Optionen zusammen mit-uxo pipefail
.e
Argument zu verwenden oder nicht .0
Erfolg immer zurückkehren und bei Fehlern ungleich Null sind,-e
ist dies nützlich, aber wie alles andere sollte es mit Vorsicht verwendet werden.