-eがスクリプトでエラーをキャッチするようにするにはどうすればよいですか?

-eがスクリプトでエラーをキャッチするようにするにはどうすればよいですか?

持っていると言えます。apple.sh

set -e
...some commands #X...
./banana.sh
...more commands #Y..

それからbanana.sh

set -e
...some commands #Z...

私の予想では、どこかでエラーが発生するとエラー状態で終了するため、banana.shエラーも報告され終了します。このような行動を見たこともあるようです。ただし、エラーが発生すると予想どおりに終了しますが、そこから「一部のコマンド#Y」エントリを実行し続けますが、これは本当ではないことがわかりました。banana.shapple.shbanana.shapple.sh

エラーがbananaポップアップとして表示されるようにするにはどうすればよいですかapple

これはRHEL5にあります

答え1

あなたのケースではないかもしれませんが、banana.sh無視される特定の状況で電話していますか?-e

存在するバッシュリファレンスマニュアルこの種のコンテキストの詳細な説明を読むことができます。ここで重要な情報は次のとおりです。

-eを省略したコンテキストで複合コマンドまたはシェル関数が実行されている場合、-eが設定されてコマンドがエラーを返しても、複合コマンドまたは関数の本文内で実行されるすべてのコマンドは-e設定の影響を受けません。状態。 -eを省略したコンテキストで複合コマンドまたはシェル関数が実行されたときに-eを設定すると、関数呼び出しを含む複合コマンドまたはコマンドが完了するまで設定は適用されません。

これは次の場合を意味しますapple.sh

set -e

func() {
        echo '...some commands #X...'
        false # Suppose ./banana.sh fails here
        echo '...some commands #Y...'
        true
}

if func; then
        echo 'func() returns success'
else
        echo 'func() returns failure'
fi

以下の結果が出力されます。

...some commands #X...
...some commands #Y...
func() returns success

bashだけでなく、dashやzshを含む他のシェルも同じ結果をもたらします。

あなたの質問に答えるには、少なくともbashでは動作を変更する方法がないようです。

関連情報