C.W.K.
Stream
Lesson 10 of 12 · published

trap — 종료 시 cleanup

~10 min · trap, cleanup, exit

Level 0창 구경꾼
0 XP0/95 lessons0/14 achievements
0/100 XP to next level100 XP to go0% complete

모든 종료 경로용 cleanup

trap 'echo cleaning up; rm -f "$lock"' EXIT

trap 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"' EXIT

reset / clear

trap - INT 가 default INT handler (종료) 복원. trap '' INT 는 시그널 무시.

trap 안의 변수

인용 신경: trap "rm -f $tmpdir" EXIT 는 trap 설정 지금 $tmpdir 펼침. 단일 따옴표 trap 'rm -f "$tmpdir"' EXIT 는 trap 발사 시점에 펼침 — 변수가 변할 수 있으면 보통 후자가 정답.

Code

자가 cleanup tmp 디렉터리·bash
#!/usr/bin/env bash
set -euo pipefail
tmpdir=$(mktemp -d)
trap 'rm -rf "$tmpdir"' EXIT
echo "working in $tmpdir"
cp -r src/ "$tmpdir/"
# whatever you do, the temp dir vanishes when this script ends

External links

Exercise

mktemp -d 으로 임시 디렉터리 만들고 EXIT trap 으로 제거하는 스크립트. 도중에 일부러 실패시키고 실패 후에도 임시 디렉터리가 cleanup 됐는지 확인.

Progress

Progress is local-only — sign in to sync across devices.
이 페이지에서 버그를 발견하셨거나 피드백이 있으세요?문제 신고

댓글 0

🔔 답글 알림 (로그인 필요)
로그인댓글을 남기려면 로그인해 주세요.

아직 댓글이 없어요. 첫 댓글을 남겨보세요.