Mam więc mały skrypt do uruchamiania niektórych testów.
javac *.java && java -ea Test
rm -f *.class
Problem polega na tym, że po uruchomieniu skryptu ./test
zwróci kod zakończenia powodzenia, nawet jeśli test się nie powiedzie, ponieważ się rm -f *.class
powiedzie.
Jedyny sposób, w jaki mogłem pomyśleć o zrobieniu tego, co chcę, jest dla mnie brzydki:
javac *.java && java -ea Test
test_exit_code=$?
rm -f *.class
if [ "$test_exit_code" != 0 ] ; then false; fi
Ale wydaje się, że jest to typowy problem - wykonaj zadanie, posprzątaj, a następnie zwróć kod wyjścia oryginalnego zadania.
Jaki jest najbardziej idiomatyczny sposób na zrobienie tego (w bashu lub ogólnie w powłokach)?
eval
jest zawsze ulubieńcem fanów.