_each_ 명령을 사용하여 오류에 대해 특정 작업을 수행하도록 bash 스크립트에 어떻게 지시할 수 있습니까?

_each_ 명령을 사용하여 오류에 대해 특정 작업을 수행하도록 bash 스크립트에 어떻게 지시할 수 있습니까?

set -eexit"uncatch" 에서 실행하는 것과 유사하게 $? != 0이 이벤트가 call 과 같은 다른 명령의 실행을 트리거하기를 원합니다 logger. 이것이 어떻게 달성될 수 있습니까?

답변1

암시한 대로이 문제trap, 대답은 신호에 하나를 설정하는 것입니다 ERR. 이는 기본적 set -e으로 에 해당합니다 trap 'exit' ERR. 예를 들어 오류를 기록하고 실행을 계속하려면 다음을 사용하세요.

trap 'logger -t myscriptname "Command $BASH_COMMAND exited with code $?"' ERR

Bash에서 이 변수에는 $BASH_COMMAND문제의 명령이 포함되어 있습니다. $?마지막으로 실행된 명령의 종료 코드를 포함합니다. 예를 들어 여러 작업을 수행하려는 경우 종료 코드가 하나만 포함되지 않으므로 logger ...; echo $?먼저 변수에 저장해야 할 수도 있습니다.$?logger$BASH_COMMAND

trap 'EXITCODE=$?; logger -t "Command $BASH_COMMAND exited with code $EXITCODE"; echo "$BASH_COMMAND at line $LINENO exited with code $EXITCODE"' ERR

물론 이렇게 긴 줄 대신에 $?함수 를 선언하고 전달하는 것이 더 나을 것입니다 !$BASH_COMMAND

관련 정보