エラー時にBashシェルスクリプトを自動的に終了する [重複] 質問する

エラー時にBashシェルスクリプトを自動的に終了する [重複] 質問する

私はシェル スクリプトをいくつか書いていますが、コマンドのいずれかが失敗した場合にそのシェル スクリプトの実行を停止する機能があれば便利だと思います。例については以下を参照してください。

#!/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

おすすめ記事