개인 학습용 자료로 GPT 찾아본 내용. 

부정확하면 다시 찾아보세요. 

 

------

 

set -o pipefail 는 bash 같은 셸에서 파이프라인(|)의 에러 처리 방식을 바꾸는 옵션이야.


🔧 기본 동작 (pipefail 없이)

일반적으로 쉘에서 파이프라인은 맨 마지막 명령의 종료 코드만 기준으로 성공/실패를 판단해.

 
false | true
echo $?
 

👉 결과: 0 (성공)

  • false는 실패(1)
  • true는 성공(0)
  • 👉 마지막 명령(true)이 성공이므로 전체가 성공으로 처리됨

➡️ 앞에서 실패해도 무시되는 문제 있음


✅ set -o pipefail 적용 시

 
set -o pipefail

false | true
echo $?
 

👉 결과: 1 (실패)

  • 파이프라인 내 하나라도 실패하면 전체 실패로 처리
  • 정확히는: 가장 마지막으로 실패한 명령의 exit code 반환

📌 왜 쓰냐?

실무에서 매우 중요함 (특히 DevOps / 스크립트)

예:

 
cat file.txt | grep "keyword" | sort
 
  • file.txt 없으면 cat 실패
  • 하지만 grep, sort는 정상 실행 → 결과적으로 성공처럼 보임 ❌

👉 pipefail 없으면 오류를 놓침

👉 pipefail 있으면:

  • cat 실패 → 전체 실패 → 바로 감지 가능 ✅

💡 보통 같이 쓰는 옵션

 
set -euo pipefail
 

의미:

  • -e: 에러 나면 즉시 종료
  • -u: 정의 안된 변수 사용 시 에러
  • -o pipefail: 파이프라인 에러 감지

👉 "안전한 bash 스크립트 기본 3종 세트"


🔥 한 줄 요약

👉 set -o pipefail = 파이프라인 중간에서 실패해도 무조건 실패로 처리하게 만드는 옵션

 

+ Recent posts