GNU/Linux >> Linux の 問題 >  >> Linux

bashスクリプトで set -e とはどういう意味ですか?

help set から :

  -e  Exit immediately if a command exits with a non-zero status.

しかし、一部の人 (bash FAQ および irc freenode #bash FAQ の作成者) は、これを悪い習慣と見なしています。以下を使用することをお勧めします:

trap 'do_something' ERR

do_something を実行する エラーが発生したときに機能します。

http://mywiki.wooledge.org/BashFAQ/105 を参照


set -e コマンドまたはパイプラインにエラーがある場合、スクリプトの実行を停止します。これは、スクリプトのエラーを無視するデフォルトのシェル動作とは逆です。 help set と入力します ターミナルで、この組み込みコマンドのドキュメントを参照してください。


bash による - Set Builtin マニュアル (-e の場合) /errexit が設定されている場合、単一の単純なコマンド、リスト、または複合コマンドで構成されるパイプラインがゼロ以外のステータスを返すと、シェルはすぐに終了します。

デフォルトでは、パイプラインの終了ステータスは、pipefail でない限り、パイプラインの最後のコマンドの終了ステータスです。 オプションが有効になっています (デフォルトでは無効になっています)。

その場合、最後の (右端の) コマンドのパイプラインの戻りステータスは、ゼロ以外のステータスで終了します。すべてのコマンドが正常に終了した場合はゼロになります。

終了時に何かを実行したい場合は、 trap を定義してみてください 、例:

trap onexit EXIT

どこで onexit 単純なスタック トレースを出力している以下のように、終了時に何かを行う関数です:

onexit(){ while caller $((n++)); do :; done; }

同様のオプション -E があります /errtrace 代わりに ERR でトラップします。例:

trap onerr ERR

ゼロ ステータスの例:

$ true; echo $?
0

ゼロ以外のステータスの例:

$ false; echo $?
1

否定ステータスの例:

$ ! false; echo $?
0
$ false || true; echo $?
0

pipefail でテスト 無効化:

$ bash -c 'set +o pipefail -e; true | true | true; echo success'; echo $?
success
0
$ bash -c 'set +o pipefail -e; false | false | true; echo success'; echo $?
success
0
$ bash -c 'set +o pipefail -e; true | true | false; echo success'; echo $?
1

pipefail でテスト 有効化:

$ bash -c 'set -o pipefail -e; true | false | true; echo success'; echo $?
1

set -e が原因で中止されたスクリプトの終了ステータスを把握しようとしているときに、この投稿を見つけました。 .答えは私には明らかではありませんでした。したがって、この答え。基本的に、set -e コマンド (例:シェル スクリプト) の実行を中止し、失敗したコマンドの終了ステータス コードを返します (例:外側のスクリプトではなく、内側のスクリプト) .

たとえば、シェル スクリプト outer-test.sh があるとします。 :

#!/bin/sh
set -e
./inner-test.sh
exit 62;

inner-test.sh のコード です:

#!/bin/sh
exit 26;

outer-script.sh を実行すると コマンド ラインから、外側のスクリプトは内側のスクリプトの終了コードで終了します:

$ ./outer-test.sh
$ echo $?
26

Linux
  1. 「–」(二点鎖線)とはどういう意味ですか?

  2. シェル スクリプトで [email protected] とはどういう意味ですか?

  3. [[ $? -ne 0 ]]; .ksh の意味

  1. 「exec{fd}/ watchdog」はBashで何をしますか?

  2. Bash スクリプトでエラーを発生させる

  3. set -x は何をしますか?

  1. `:-`はシェルスクリプトで何を意味しますか?

  2. シェルスクリプト行の最後にあるアンパサンドとはどういう意味ですか?

  3. -sと[[]]は、BashのIf条件で何を意味しますか?