오류 발생시 정리를 위해 trap을 사용하려고합니다. 나는 다음과 같은 코드를 가지고 있지만 구문적인 문제가있는 것으로 보인다.bash의 트랩 구문 문제
#!/bin/bash
set -e
function handle_error {
umount /mnt/chroot
losetup -d $LOOP_DEV1 $LOOP_DEV2
}
trap "{ echo \"$BASH_COMMAND failed with status code $?\"; handle_error; }" ERR
트랩 작성 방법에 문제가 있는지 확인하십시오. 오류가 발생하면 트랩이 제대로 실행되지만 아래에 또 다른 원치 않는 오류 메시지가 발생합니다.
/root/myscript.sh: line 60: } ERR with status code 0: command not found
##line 60 is that line of code that exited with a non zero status
어떻게 올바르게 오류 메시지를 피하기 위해 작성합니까? 또한 인수 $ LOOP_DEV1과 $ LOOP_DEV2를 메인 스크립트에서 트랩으로 보낸 다음 handle_error 함수로 보내야한다면 어떻게 될까요? 현재는 주 스크립트에서 환경 변수로 내보내집니다. 함정 예제를 검색했지만 비슷한 결과를 얻을 수 없었습니다.
편집
나는/빈/bash는에/빈/SH에서 오두막을 변경했습니다./bin/sh는 이미 bash와 심볼릭 링크가되어 있었기 때문에 나는 유니콘을 기대하지도 않았고 아무 것도 보지 못했습니다. 트랩 호 흥미로운 재귀 만드는 것을
스크립트가 실제로'sh'가 아닌'bash'로 실행되면'handle_error() {'로 함수를 정의해야합니다. 'function' 키워드는'bash' 확장입니다. – chepner
@chepner/bin/sh는 대부분의 경우 bash에 대한 sym 링크가 아니십니까? 적어도 그것은 내 시스템의 경우 인 것 같습니다. –
Bash 구문을 사용하는 경우,'/ bin/sh'가'/ bin/bash'에 대한 심볼릭 링크 인 경우에도 shbang 줄에'#!/bin/bash'를 지정해야합니다. 그렇게하면'/ bin/sh'가'/ bin/bash '에 대한 심볼릭 링크가 아닌 시스템에서 스크립트가 실행된다면 여전히 올바르게 작동합니다. –