종료 및 오류에 대한 bash 스크립트 트랩 및 차이에 대한 논리

종료 및 오류에 대한 bash 스크립트 트랩 및 차이에 대한 논리

Bash 스크립트가 있는데 EXIT 및 ERR 조건 모두에 대해 트랩하는 기능을 추가하고 싶습니다. 구조는 현재

trap cleanup EXIT

function notify(reason) {}
function build {}
function dbops {}
function deploy {}
function cleanup {}

notify('start') \
&& build \
&& dbops \
&& deploy \
&& notify('finished');

오류에 대한 트랩을 추가하고 (선택적으로) 종료 이유를 캡처하여 알림 기능을 통해 보내는 권장 방법은 무엇입니까? 현재 정리 작업은 EXIT에서 잠금 파일을 삭제하는 것뿐입니다.

notify(reason)스크립트가 예기치 않게 실패하는 경우 슬랙으로 메시지를 보낼 수 있지만 일반적인 EXIT에서는 메시지를 보내지 않기를 원합니다 .

내 실행 연결이 올바른 오류 트래핑을 방해합니까?

답변1

trap ... ERR종료 코드가 테스트된 명령에서는 오류를 포착할 수 없습니다 . 특별한 경우에는 bash 매뉴얼 페이지에서 다음을 수행하십시오.

실패한 명령이 ... && 또는 ||에서 실행된 명령의 일부인 경우 ERR 트랩이 실행되지 않습니다. 마지막 && 뒤에 오는 명령을 제외한 목록 ...

일반적으로 함수 집합의 정리를 보장하는 가장 간단한 방법은 해당 함수를 모두 하위 셸에서 실행하는 것입니다. 그러나 함수가 종료되더라도 여전히 정리 작업을 수행할 수 있습니다.

관련 정보