だから、いくつかのテストを実行する小さなスクリプトがあります。
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