취뽀몽

[Server] /bin/sh^m: bad interpreter: no such file or directory 해결 방법 본문

Server

[Server] /bin/sh^m: bad interpreter: no such file or directory 해결 방법

허몽구 2024. 6. 8. 10:40

새로 추가된 배치가 있어서 젠킨스에 등록하기 전 수동으로 확인해보기 위해 셸스크립트를 실행했다.

셸스크립트 이름을 밝힐 수는 없으니... 편의성을 위해 test라고 지칭하겠다.

리눅스 환경에서 ./test.sh 를 실행하니 아래와 같은 오류가 발생했다.

-bash: ./test.sh: /bin/sh^m: bad interpreter: no such file or directory

 

찾아보니 이 오류는 스크립트 파일의 줄 끝 문자 형식 때문에 발생한다고 한다.

 

윈도우에서 작성된 텍스트 파일은 줄 끝 문자가 CRLF (\\r\\n)인 반면,

유닉스 기반 시스템(예: Linux, macOS)에서는 줄 끝 문자가 LF (\\n)이다.

 

오류 메시지의 ^M은 캐리지 리턴 문자(\\r)가 포함되어 있음을 나타내기 때문에

텍스트 파일의 줄 끝 문자를 유닉스 형식으로 변환해야 한다.

 

형식을 변경하기 전, 현재 형식을 확인하기 위해 다음과 같은 명령어를 입력해준다.

file test.sh

 

 

이번에 신규로 생성한 배치 셸 스크립트로 ASCII test, with CRLF line terminators 라고 출력된다.

윈도우 형식임을 나타내는 것이다.

 

그럼 기존에 존재하는 다른 배치 셸 스크립트의 형식은 어떻게 출력될까?

 

신규로 만든 셸스크립트와 형식이 다른 걸 확인할 수 있다.

ASCII test가 바로 유닉스 형식이다.

 

그럼 이제 test.sh(신규 생성 배치 셸 스크립트)을 유닉스 형식으로 변환해보자.

 

vi test.sh

 

vi 편집기를 열어서,

:set fileformat=unix

 

를 입력해준다. 유닉스 형식으로 파일 형식을 지정해주는 것이다.

이후 :wq로 저장하고 vi 편집기를 빠져나오면,

 

 

저장되는 것을 확인할 수 있다.

 

이제 다시 배치를 실행해주면 정상적으로 실행 가능하다!

 


 

셸 스크립트를 처음 만드는 건 아닌데... 이번에 처음 해당 오류를 보면서 해결한 내용을 공유하고 싶었다.

의외로 많이 발생하는 것 같으니 해결 방법을 잘 기억해둬야겠다!