1. ホーム
  2. bash

[解決済み] エラー時にBashシェルスクリプトを自動終了させる [重複]。

2022-03-14 09:17:16

質問

シェルスクリプトを書いているのですが、コマンドのどれかに失敗したときに、そのシェルスクリプトの実行を停止させる機能があると便利なのですが。以下に例を示します。

#!/bin/bash

cd some_dir

./configure --some-flags

make

make install

つまり、この場合、スクリプトが指定されたディレクトリに変更できないのであれば、確かに ./configure の後、失敗した場合。

各コマンドにifチェックを入れることができるのは十分承知していますが(これは絶望的な解決策だと思います)、コマンドの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 は未定義の変数でエラーとなり -o (for option) pipefail は、コマンドパイプの失敗で終了します。いくつかの不具合や回避策については、次のような文書があります。 ここで .

(*) 注意

シェルが行う ない は、失敗したコマンドの一部が の直後のコマンドリストです。 一方 または まで キーワードで指定します。 に続くテストの一部です。 もし または エリフ 予約語、一部 の中で実行されるすべてのコマンドの && または || コマンドを除くリスト の後に、最後の && または || を除くパイプラインのコマンドは でコマンドの戻り値が反転している場合,または,最後の !

(以下 man bash )