この関数は、呼び出し元のスクリプトを終了する必要があります。
crash() {
echo error
exit 1
}
これは期待どおりに機能します。
echo before
crash
echo after # execution never reaches here
しかし、これはしません:
echo before
x=$(crash) # nothing is printed, and execution continues
echo after # this is printed
関数の結果をキャプチャし、終了させるにはどうすればよいですか?
これは、$(crash)
がサブシェルでcrash
を実行するため、exit
はスクリプトではなくサブシェルに適用されるためです。
とにかくスクリプトが終了したために出力を使用しない場合、変数に出力をキャプチャする意味は何ですか?
これで問題が解決するはずです。
echo before
x=$(crash) || exit # if crash give -gt 0 value then exit with the same value
echo after