シェルスクリプトset -e
では、スクリプトから実行されたコマンドの一部がゼロ以外の終了コードで終了したときにスクリプトを停止することで、スクリプトをより堅牢にするためによく使用されます。
通常、最後に追加することで、一部のコマンドが成功することを気にしないように指定するのは簡単です|| true
。
実際には戻り値を気にしているが、ゼロ以外の戻りコードでスクリプトを停止させたくない場合に問題が発生します。次に例を示します。
output=$(possibly-failing-command)
if [ 0 == $? -a -n "$output" ]; then
...
else
...
fi
|| true
ここでは、終了コードのチェック (したがって、コマンド置換式の内部では使用できません) と出力の取得の両方が必要です。ただし、コマンド置換でコマンドが失敗した場合、スクリプト全体が原因で停止しset -e
ます。
後で設定を解除して元に戻すことなく、スクリプトがここで停止するのを防ぐきれいな方法はあり-e
ますか?