내 makefile에서 이와 같은 작업을 수행합니다.
if (mycommand) &> mycommand.log; then
echo success
else
c=$?;
echo;echo -e "Bad result from previous command, see mycommand.log for more details";echo;
command_to_run_on_fail
(exit $c)
fi
상황에 맞게 다음과 같이 할 수 있습니다.
if ! (mycommand) &> mycommand.log; then
c=$?;
cat mycommand.log
rm mycommand.log
(exit $c)
fi
따라서 "if"는 명령을 실행하고 출력을 mycommand.log로 파이프합니다. stdout vs stdout vs 무엇이든 잡아야하는 경우 파이프 명령 '&>'을 '>'로 변경해야 할 수도 있습니다. 명령이 실패하면 오류 코드를 캡처하고 mycommand.log의 내용을 인쇄하고 mycommand.log를 제거한 후 원래 오류 코드와 함께 리턴하십시오.
(exit $ c)가 없으면 'rm'명령이 반환 한 것과 일치하는 종료 코드와 함께 반환됩니다.
마지막으로, 하나의 라이너를 원한다면 이와 같은 것이 효과적입니다.
mycommand &> mycommand.log || cat mycommand.log; rm mycommand.log