방어적 헤더
#!/usr/bin/env bash
set -euo pipefail
IFS=$'\n\t'전문적 bash 스크립트 다수가 이 두 줄로 시작. 없으면 에러가 조용히 삼켜지고 버그가 안 보임.
각 flag 의미
- -e (errexit) — 어떤 command 가 non-zero 반환하면 즉시 종료 (test / pipeline 의 carve-out 있음).
- -u (nounset) — 정의 안 된 변수 참조 시 종료.
$PROOJECT같은 오타 잡음. - -o pipefail — 파이프라인 exit code 가 첫 실패 단계의 거. 마지막 command 만 보지 않음.
- IFS=$'\n\t' — word splitting 을 줄바꿈과 탭으로 제한 (공백 제외). 파일명 / 다중 단어 값에 안전.
알아야 할 carve-out
set -e 는 command 가 if, && 체인, | 의 일부면 발사 안 함. 이걸 활용:
# OK — caller 가 exit code 검사
if grep -q ERROR build.log; then ...
# 실패 허용은 || true
rm -rf .cache || true-u 와 default
-u 면 unset 변수 참조 시 폭발. ${var:-} 가 빈 default, ${var:-fallback} 가 실제 default. 사용자 env 변수는 항상 방어적: "${DEBUG:-0}".
커스텀 에러 보고
err() { echo "$0:${LINENO}: $*" >&2; exit 1; }
[[ -d "$dir" ]] || err "missing $dir"작은 err helper 가 스크립트 실패를 actionable 하게. 다음 레슨의 trap 과 짝지어 cleanup.