論理チェックを考慮せずにbash関数の内部で主張する方法は?

論理チェックを考慮せずにbash関数の内部で主張する方法は?

問題が発生したときにトリガーするbashスクリプトのグローバルトラップを実装したいと思います。問題は、述語である関数を評価するif句があり、述語の評価中にエラーが発生した場合にトラップが呼び出されないことです。述語がfalseを返すと、トラップが呼び出されないことがわかりましたが、述語を評価するロジックがトラップも無効になるとは予想していませんでした。行動の私の説明は正しいですか? bashに述部を論理的に評価するトラップを呼び出す方法はありますか?

例えば、

$ trap 'echo $?' ERR
$ set -eE
$ foo() { return 1; }
$ bar() { foo; return 0; }
$ bar
1

今まではそんなに良くなった。トラップのトリガーに失敗が必要で、すべての機能がトラップを継承するように要求するトラップを定義しました。次に、barどちらが失敗したかを呼び出し、fooトラップを呼び出し、エラーコードを印刷します1

$ if bar; then echo true; fi
true

これは予期しないことです。出力は1。戻りコードのみが考慮bar対象から除外されると予想されます。私の考えで実際に起こることはそこにあるbarすべての論理です返品考慮対象から除外されます。これはbashがどのように機能するのでしょうか?bar最後のステートメント(たとえば、呼び出し)の前に失敗したロジックがトラップをトリガーするように指定する方法はありますか?fooreturn 0;

ベストアンサー1

おすすめ記事