いくつかのコマンドを呼び出す Bash シェル スクリプトがあります。
いずれかのコマンドがゼロ以外の値を返した場合、シェル スクリプトが戻り値 1 で自動的に終了するようにしたいと思います。
各コマンドの結果を明示的に確認せずにこれは可能ですか?
例えば、
dosomething1
if [[ $? -ne 0 ]]; then
exit 1
fi
dosomething2
if [[ $? -ne 0 ]]; then
exit 1
fi
ベストアンサー1
スクリプトの先頭に以下を追加します:
set -e
これにより、単純コマンドが 0 以外の終了値で終了した場合、シェルは直ちに終了します。単純コマンドとはif
、、、while
またはuntil
テストの一部ではなく、またはリストの一部でも&&
ないコマンドです||
。
を参照してくださいbash マニュアル詳細については、「set」内部コマンドを参照してください。
途中で何かが失敗してスクリプトの残りの部分の前提が崩れているのに、スクリプトが頑固に続行されるのは本当に迷惑です。私は個人的に、ほとんどすべてのポータブル シェル スクリプトを で開始しますset -e
。
特にbashで作業する場合は、まず
set -Eeuo pipefail
これは同様の方法でさらに多くのエラー処理をカバーします。これらは新しい bash プログラムの妥当なデフォルトであると考えています。これらのオプションの機能の詳細については、bash マニュアルを参照してください。