명령을 찾을 수 없음 오류가 발생할 때 zsh 스크립트 실행을 중지하고 싶습니다.
알아요 command_not_found_handler
. 하지만 이 기능을 사용하면 메시지만 인쇄할 수 있고 상위 쉘을 중지할 수는 없습니다.
내가 찾고 있는 기능은 전역 일치가 실패할 때 발생하는 기능과 유사합니다.
echo nonexistent*
echo this will not be shown
zsh: no matches found: nonexistent*
답변1
다음을 정의할 수 있습니다.ZERR
덫허용된 것보다 더 세밀하게 제어 할 수 있습니다 set -e
. 관례적으로 종료 상태 127은 명령을 찾을 수 없음 오류를 위해 예약되어 있습니다.
trap 'if (($? == 127)); then exit 127; fi' ZERR
이것 역시 같은 주의 사항이 있습니다 set -e
. 특히, 와 같은 내부 조건을 트리거하지 않습니다 if no_such_command; …
. 그리고 원래 쉘이 아닌 현재 하위 쉘에서만 종료할 수 있습니다(그러나 해당되는 경우 상위 쉘의 ZERR 트랩을 트리거합니다).
귀하가 요구하는 행동이 바람직한 상황을 상상하기가 어렵습니다. 사용 set -e
. 실패할 것으로 예상되는 특정 명령의 경우 || true
.