스크립트 디버깅·안전성 향상의 표준 옵션들.
「실행 추적」, 「실패 시 종료」, 「미정의 변수 검출」 등 set 명령으로 활성화.
set -x.
eXpand — 매 명령 실행 전 그 명령을 출력.
+ ls /tmp 같은 trace.
「스크립트가 어디까지 갔고 어떤 명령을 실행했나」 즉시 보임.
디버깅 시 첫 도구.
끄려면 set +x.
set -e.
errexit — 어느 명령이라도 실패(0 아닌 종료) 시 즉시 스크립트 종료.
실패한 명령이 있는데 그냥 진행해서 사고 나는 걸 방지.
거의 모든 모던 스크립트의 기본.
set -u.
nounset — 정의 안 된 변수 사용 시 에러로 종료.
echo $undefined_var이 빈 출력 대신 에러.
오타 잡기에 매우 유용.
${var:-default}로 옵셔널 변수 처리.
set -o pipefail.
파이프의 중간이 실패해도 전체 종료.
기본은 마지막 명령의 종료 코드만 봄 — pipefail 없으면 false | echo "hi"가 성공으로 보임.
set -euo pipefail 한 줄이 모던 bash 스크립트의 표준 prelude.
한 줄 요약
set -x 명령 추적, set -e 실패 시 종료, set -u 미정의 변수 에러, set -o pipefail 파이프 중간 실패도 잡기.
set -euo pipefail이 모던 표준 prelude.
더 알아볼 것
- set -E + trap ERR로 에러 핸들러
- BASH_XTRACEFD로 trace 별도 파일
- unofficial bash strict mode