- Bash 스크립트가 예상과 다르게 동작할 때는 실행되는 명령을 그대로 보는 방식만으로도 원인 추적이 쉬워짐
set -x는 각 줄을 변수 확장 후 출력해, 스크립트가 실제로 어떤 명령을 실행하는지 확인하게 해줌- 명령줄에서
bash -x script.sh로 실행하면script.sh상단에set -x를 넣은 것과 같은 효과를 냄 DEBUG트랩과read를 함께 쓰면 각 줄 실행 전에 멈춰 파일명, 줄 번호, 다음 명령을 확인할 수 있음die() { echo $1 >&2; exit 1; }함수는 실패한 명령 뒤에 붙여 표준 에러 메시지 출력 후 종료하는 흐름을 단순하게 만듦
실행 흐름을 눈으로 확인하기
set -x는 스크립트가 실행하는 줄을 출력하고, 변수는 확장된 값으로 보여줌- 스크립트 상단에
set -x를 넣어 사용할 수 있음 - 같은 동작은 명령줄에서도 실행 가능함
$ bash -x script.sh- 이는
script.sh맨 위에set -x를 넣는 것과 같음
줄마다 멈춰 확인하기
DEBUG트랩은 각 코드 줄이 실행되기 전에 동작함- 스크립트 시작 부분에 아래 코드를 넣으면, 다음 명령을 실행하기 전에 Enter 입력을 기다림
trap '(read -p "\[$BASH_SOURCE: $LINENO] $BASH_COMMAND")' DEBUGread -p는 메시지를 출력하고 Enter 입력을 기다림$BASH_SOURCE는 스크립트 파일 이름임$LINENO는 줄 번호임$BASH_COMMAND는 다음에 실행될 명령임
실패 시 메시지를 남기고 종료하기
die함수는 명령 실패 시 메시지를 출력하고 프로그램을 종료하는 데 사용할 수 있음die() { echo $1 >&2; exit 1; }- 실패할 수 있는 명령 뒤에
some_command || die "oh no!"처럼 붙이면 됨
- 이 함수는 메시지를 표준 에러로 보내고
exit 1로 종료함