回答:
まず、http://explainshell.comが-o
提供するオプションの説明が完全に正しいわけではないことを恐れています。
それset
がbulit-inコマンドである場合、次のコマンドをhelp
実行すると、ドキュメントを見ることができます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
ご覧の-o pipefail
とおり:
パイプラインの戻り値は、ゼロ以外のステータスで終了する最後のコマンドのステータス、またはゼロ以外のステータスで終了したコマンドがない場合はゼロ
しかし、それは言っていません: Write the current settings of the options to standard output in an unspecified format.
これは、-x
既に知っているとおりデバッグに使用さ-e
れ、スクリプトの最初のエラーの後に実行を停止します。次のようなスクリプトを検討してください。
#!/usr/bin/env bash
set -euxo pipefail
echo hi
non-existent-command
echo bye
echo bye
とき行が実行されることはありません-e
ので、使用されている
non-existent-command
0を返しません。
+ echo hi
hi
+ non-existent-command
./setx.sh: line 5: non-existent-command: command not found
なければ-e
、エラーが起きたにもかかわらず、私たちが教えてくれなかったので、最後の行に印刷されますBash
自動的に終了するには:
+ echo hi
hi
+ non-existent-command
./setx.sh: line 5: non-existent-command: command not found
+ echo bye
bye
set -e
多くの場合、最初のエラーが発生したときにスクリプトが確実に停止するように、スクリプトの先頭に配置されます。たとえば、ファイルのダウンロードに失敗した場合、抽出する意味がありません。
set -e
それがただ原因となることを意味する場合、スクリプトはエラーで終了します。あなたの例では、とともに多くのオプションの1つにすぎません-uxo pipefail
。
e
引数を使用するかどうかを提案しているかどうかわからないというつもりでした。
0
が成功時に常に戻り、失敗時にゼロ以外の値が返されることが確実な場合-e
は便利ですが、他のすべてとしては慎重に使用する必要があります。
set -uxo pipefail
)。