私はUbuntu(明晰)でsh
(dash
)を使用していますが、マンページには-e
:
-e errexit対話型でない場合、テストされていないコマンドが失敗した場合はすぐに終了します。 コマンドの終了ステータスは明示的にテストされたと見なされます if、Elif、while、またはuntil;または コマンドが「&&」または「||」の左側のオペランドである場合オペラ‐ tor。
バックグラウンドコマンドが失敗するとどうなりますか?そして、bash
はこの点で異なった振る舞いをしますか?
これをテストするのは非常に簡単です。 -e
:
% bash -e -c 'false & echo waiting; if wait $!; then echo success; else echo failure; fi'
waiting
failure
したがって、バックグラウンドコマンドが失敗した場合、シェルは自動的に終了しません(-e
十分ではありません)。
明示的なテストの外部でwait
を実行すると、wait
は失敗したバックグラウンドプロセスのリターンコードを返します。この場合、-e
が指定されている場合、シェルは終了します。
% bash -e -c 'false & echo waiting; wait $!; echo returned'
waiting
bash
またはsh
またはzsh
でも同じ結果になります。