스크립트 줄바꿈(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로 텍스트 파일의 줄바꿈 정책을 고정하는 방법도 고려할 수 있습니다.