EXIT 및 ERR 조건을 캡처하는 기능을 추가하고 싶은 bash 스크립트가 있습니다. 현재 구조는
trap cleanup EXIT
function notify(reason) {}
function build {}
function dbops {}
function deploy {}
function cleanup {}
notify('start') \
&& build \
&& dbops \
&& deploy \
&& notify('finished');
오류 트랩을 추가하고 (선택적으로) 종료 이유를 캡처하여 알림 기능을 통해 보내는 권장 방법은 무엇입니까? 이제 모든 정리 작업은 종료 시 잠금 파일을 삭제하는 것입니다.
notify(reason)
스크립트가 예기치 않게 실패하는 경우 Slack에 메시지를 보낼 수 있기를 원하지만, 정상적으로 종료할 수는 없습니다.
내 실행 체인이 오류를 올바르게 포착하는 데 방해가 됩니까?
답변1
trap ... ERR
종료 코드를 테스트한 명령에서는 오류를 포착할 수 없습니다 . 특정 경우에는 bash 매뉴얼 페이지에서 다음을 수행하십시오.
실패한 명령이... && 또는 || 내에서 실행되는 명령의 일부인 경우 마지막 &&... 뒤에 나열된 명령을 제외하고는 ERR 트랩이 실행되지 않습니다.
일반적으로 함수 세트가 정리되도록 보장하는 가장 쉬운 방법은 함수가 어떻게 종료되든 여전히 정리할 수 있도록 하위 쉘에서 실행하는 것입니다.