[bash] /bin/sh^M: bad interpreter

sass 컴파일을 하려고 watch.sh를 실행했더니 이런 메시지가 뜨면서 실행되지 않았다.

-bash: ./watch.sh: /bin/sh^M: bad interpreter: No such file or directory

sh 파일의 맨 앞에 선언한 인터프리터가 /bin/sh인데, 여기에 ^M 문자가 붙으면서, “/bin/sh^M 같은 인터프리터는 없는데?” 하고 에러 메시지가 나온 것이다.

^M 문자는 윈도우에서 리턴값을 표시하는 문자의 일부다. 보통은 r로 많이 봤을 것이다. 윈도우는 리턴값을 rn로 표시하고 유닉스 계열은 n으로 표시하는데, 윈도우에서 (혹은 윈도우 형식으로) 생성한 리턴값을 유닉스에서 읽으면서 n만을 리턴값으로 인식, r은 그냥 문자열로 인식하면서 문제가 생기는 것이다.

r, rn, n의 OS별 사용은 다음과 같다고 한다.

개발자라면 코드를 작성해서 r 문자를 잡아도 될 것이다. 물론 커맨드라인에서 sed를 이용해 간편하게 제거하는 방법이 있다. 제거하는 방법은 아래 글을 참조했다.

Remove CTRL-M characters from a file in UNIX

명령어는 아래와 같다.

sed -i "s|{^M문자 입력 버튼 누르기}||g" watch.sh

^M문자 입력 버튼 누르기에서는 Ctrl + v, m을 누르면 된다. 그러면 ^M 문자가 입력되는 것을 볼 수 있을 것이다. Ctrl을 떼지 말고 v, m을 연이어 누르는 것이 중요하다.

해설

카테고리

17년차 풀스택 웹 개발자 Mytory입니다

웹 개발에서도 중요한 것은 개념입니다.
이 블로그에는 제가 개발하며 익힌 개념들을 정리합니다.

워드프레스를 오래 다뤄 왔고 강의도 두 편 찍었습니다.
– 인프런 “워드프레스 제대로 개발하기 어드민 편, 클라이언트 편
– 클래스101 “누구나 할 수 있는 워드프레스 홈페이지 만들기 – 기획부터 출시까지 한 방에 OK

유튜브 채널에 워드프레스 관련 팁들을 올리고 있습니다.

👉 소개 더 보기

대표글

댓글 남기기