私はシェル スクリプトをいくつか書いていますが、コマンドのいずれかが失敗した場合にそのシェル スクリプトの実行を停止する機能があれば便利だと思います。例については以下を参照してください。
#!/bin/bash
cd some_dir
./configure --some-flags
make
make install
したがって、この場合、スクリプトが指定されたディレクトリに変更できない場合、失敗したときにその後に./configure を実行することは望ましくありません。
各コマンドに対して if チェックを実行できることはわかっていますが (これは絶望的な解決策だと思います)、コマンドの 1 つが失敗した場合にスクリプトを終了するグローバル設定はありますか?
ベストアンサー1
使用set -e
組み込み:
#!/bin/bash
set -e
# Any subsequent(*) commands which fail will cause the shell script to exit immediately
あるいは、-e
コマンドラインを渡すこともできます:
bash -e my_script.sh
この動作を無効にすることもできますset +e
。
次のように、-e
-u
-x
およびオプションのすべてまたは一部を使用することもできます。-o pipefail
set -euxo pipefail
-e
エラーで終了、-u
未定義変数でエラー、-x
実行前にコマンドを出力、-o (for option) pipefail
コマンドパイプの失敗で終了。いくつかの落とし穴と回避策はよく文書化されている。ここ。
(*) 注記:
失敗したコマンドがwhileまたはuntilキーワードの直後のコマンド リストの一部である場合、予約語ifまたはelifの後のテストの一部である場合、最後の&&または||の後のコマンドを除く&&または||リストで実行されたコマンドの一部である場合、パイプライン内の最後のコマンド以外のコマンドである場合、またはコマンドの戻り値が!で反転されている場合、シェルは終了しません。
(からman bash
)