답변:
다음은 트랩 사용의 예입니다.
#!/bin/bash -e
function cleanup {
echo "Removing /tmp/foo"
rm -r /tmp/foo
}
trap cleanup EXIT
mkdir /tmp/foo
asdffdsa #Fails
산출:
dbrown@luxury:~ $ sh traptest
t: line 9: asdffdsa: command not found
Removing /tmp/foo
dbrown@luxury:~ $
asdffdsa 행이 실패 했음에도 불구하고 정리는 여전히 실행되었습니다.
로부터 bash
맨 (내장 명령에 관한) :
trap [-lp] [[arg] sigspec ...]
명령 arg는 쉘이 신호 sigspec을 수신 할 때 읽고 실행됩니다.
따라서 Anon.의 답변 에서 알 수 있듯이 trap
스크립트의 초기에 호출 하여 ERR에서 원하는 핸들러를 설정하십시오.
에 대한 참조에서 set
:
-이자형
실패한 명령이 until 또는 while 루프의 일부, if 문의 일부, && 또는 || 목록 또는 명령의 반환 상태가!를 사용하여 반전되는 경우. ERR에 대한 트랩이 설정된 경우 쉘이 종료되기 전에 실행됩니다.
(강조 광산).
sh
devguydavid의 답변 버전 .
#!/bin/sh
set -e
cleanup() {
echo "Removing /tmp/foo"
rm -r /tmp/foo
}
trap cleanup EXIT
mkdir /tmp/foo
asdffdsa #Fails
심판 : shellscript.sh
POSIX
나를 웃게한다. :) 링크 한 훌륭한 교육 사이트입니다.
help trap
내장에 대한 도움말을 보려면 실행 하십시오.