모든 command 가 남기는 숫자
Unix 의 모든 프로세스는 0~255 범위의 정수로 종료해. Shell 은 가장 최근 exit code 를 $? 에 저장. 관례상 0 은 성공, 0 이 아닌 거는 '뭔가 어긋남 — 어떻게 어긋났는지는 숫자가 알려줌'. 이게 && 체인과 모든 CI 파이프라인 디버깅의 기반이야.
흔한 code
- 0 — 성공
- 1 — 일반 실패 (구체적이지 않은 모든 실패)
- 2 — 사용법 에러 (사용자 flag 가 말이 안 됨)
- 126 — command 는 있는데 실행 권한 없음
- 127 — command not found
- 128 + N — signal N 으로 종료.
Ctrl+C(SIGINT = 2) → 130;kill -9(SIGKILL = 9) → 137.
잘 짜인 도구는 자기만의 코드를 man page 에 적어둬. grep 은 0 = 매치, 1 = 매치 없음, 2 = 에러.
성공 / 실패에 따라 체이닝
cmd1 && cmd2 = cmd1 성공 시에만 cmd2. cmd1 || cmd2 = cmd1 실패 시에만 cmd2. cmd1 ; cmd2 = 무조건 둘 다. 합치면 한 줄짜리 if/else: ./test.sh && ./deploy.sh || echo "tests failed".
직접 반환하기
스크립트에서 exit N 은 프로세스를 N 으로 종료. 함수에서 return N 은 caller 의 $? 를 설정. 실패 경로에서 조용히 exit 0 하지 마. 그러면 CI 가 너한테 거짓말함.
파이프라인의 exit code
기본적으로 파이프라인의 exit code 는 마지막 command 의 거. cat missing.txt | wc -l 는 cat 이 실패해도 0 이 떠. 스크립트에 set -o pipefail 넣으면 어느 단계든 실패 시 전체 실패. Scripting 트랙에서 set -euo pipefail 패턴으로 더 다뤄.