後で使用できるように終了コードを保存

後で使用できるように終了コードを保存

だから、いくつかのテストを実行する小さなスクリプトがあります。

javac *.java && java -ea Test
rm -f *.class

これで問題は、スクリプトの実行時に./testテストが失敗してもrm -f *.class成功したため、成功した終了コードを返すことです。

私が望むことを行うために私が考えることができる唯一の方法は私に醜い感じです。

javac *.java && java -ea Test
test_exit_code=$?
rm -f *.class
if [ "$test_exit_code" != 0 ] ; then false; fi

しかし、これは一般的な問題のようです。ジョブを実行してクリーンアップし、元のジョブの終了コードを返します。

これを行う最も慣用的な方法は何ですか(bashまたは通常シェルで)。

ベストアンサー1

私は以下を選択します:

javac *.java && java -ea Test
test_exit_code=$?
rm -f *.class
exit "$test_exit_code"

exit利用可能なのに、なぜジャンプしますか?


あなたが使用できるtrap

trap 'last_error_code=$?' ERR

たとえば、

$ trap 'last_error_code=$?' ERR
$ false
$ echo $?
1
$ echo $last_error_code $?
1 0

おすすめ記事