私はUbuntu(clear)でsh
()を使用しており、dash
マンページには次のように表示されます-e
。
-e errexit 対話型でない場合、テストされていないコマンドが失敗した場合は直ちに終了します。 コマンドの終了ステータスは明示的にテストされたと見なされます。 if コマンドは、if、elif、while、または Until を制御します。 コマンドが「&&」または「||」の左オペランドの場合、Opera - トール。
バックグラウンドコマンドが失敗した場合はどうなりますか?bash
これに関してパフォーマンスは異なりますか?
答え1
これをテストするのはとても簡単です。そして-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