모든 종료 경로용 cleanup
trap 'echo cleaning up; rm -f "$lock"' EXITtrap CMD SIGNAL... 가 SIGNAL 시 CMD 실행. EXIT 는 어떻게 종료하든 (정상 / 에러 / Ctrl+C / kill) 항상 실행되는 특수 의사 시그널. shell 의 가장 신뢰성 있는 cleanup hook.
흔한 패턴
tmpdir=$(mktemp -d)
trap 'rm -rf "$tmpdir"' EXIT
# ... $tmpdir 자유롭게 사용. 자동 cleanup
# 락 파일
lock=/tmp/myjob.lock
[[ -e "$lock" ]] && { echo 'already running'; exit 1; }
echo $$ > "$lock"
trap 'rm -f "$lock"' EXIT다수 시그널
# 여러 시그널 같은 handler
trap 'cleanup' EXIT INT TERM HUP
# 다른 handler
trap 'echo "caught Ctrl+C"' INT
trap 'echo "normal exit"' EXITreset / clear
trap - INT 가 default INT handler (종료) 복원. trap '' INT 는 시그널 무시.
trap 안의 변수
인용 신경: trap "rm -f $tmpdir" EXIT 는 trap 설정 지금 $tmpdir 펼침. 단일 따옴표 trap 'rm -f "$tmpdir"' EXIT 는 trap 발사 시점에 펼침 — 변수가 변할 수 있으면 보통 후자가 정답.