스크립트 줄바꿈(CRLF) 오류 해결: set -o pipefail invalid option

증상

Ubuntu(또는 WSL)에서 아래처럼 스크립트를 실행했을 때 옵션이 깨져서 실패합니다.

bash temp_token_setting_merged.sh
# (에러)
# : invalid option namerged.sh: line 2: set: pipefail

원인

대부분 Windows 환경에서 생성된 파일이 CRLF 줄바꿈을 포함하고 있어서, set -o pipefail 줄 끝에 \r(보통 ^M)가 붙습니다.

그 결과 pipefail\r가 “pipefail이 아닌 다른 옵션”으로 해석되면서 invalid option 류의 에러가 발생합니다.

확인 방법

cat -v temp_token_setting_merged.sh | head -n 5
# ^M 이 보이면 CRLF 줄바꿈 가능성이 큽니다.

또는 파일의 앞부분만 확인합니다.

sed -n '1,5p' temp_token_setting_merged.sh | cat -v

해결 방법(권장: dos2unix 사용)

Ubuntu에 dos2unix가 없다면 먼저 설치합니다.

sudo apt-get update
sudo apt-get install -y dos2unix

이후 변환 후 실행합니다.

dos2unix temp_token_setting_merged.sh
chmod +x temp_token_setting_merged.sh
./temp_token_setting_merged.sh

해결 방법(대안: sed로 \r 제거)

dos2unix를 쓰기 어렵다면 줄 끝의 \r만 제거할 수 있습니다.

sed -i 's/\r$//' temp_token_setting_merged.sh
chmod +x temp_token_setting_merged.sh
./temp_token_setting_merged.sh

추가 체크(쉬뱅 라인)

스크립트 첫 줄(예: #!/usr/bin/env bash)에도 ^M이 붙어 있으면 추가로 문제가 생길 수 있습니다.

head -n 1 temp_token_setting_merged.sh | cat -v

첫 줄에 ^M이 있으면 위의 dos2unix 또는 sed -i 's/\r$//' 변환을 다시 적용하세요.

재발 방지(생성 단계)

  • Windows에서 스크립트를 만들었다면, 저장/내보내기 과정에서 “LF(Line Feed)”로 저장되도록 설정합니다.
  • Git을 쓰는 경우 .gitattributes로 텍스트 파일의 줄바꿈 정책을 고정하는 방법도 고려할 수 있습니다.