생계유지형 개발자/Stack Over Flow 한국판

[Linux] /bin/sh^M: bad interpreter: No such file or directory

이 가을 2020. 8. 12. 12:04

# 오류

/bin/sh^M: bad interpreter: No such file or directory

xcode에서 ios 앱 빌드하면서 발생한 오류지만 사실상 Linux 실행오류이다.

아래쪽에 빨간색 영역에 있는 메세지 중에서 /Users/user/...../Pods-MobileConnect-frameworks.sh 파일이 문제이다.

# 원인

이는 십중 팔구 윈도우에서 작성한 스크립트 파일을 Linux (필자는 Mac)에서 실행했기 때문에 나타나는 오류이다.

파일 내용 중 라인 끝에 있는 개행문자가 달라서 발생하는 문제인데 /bin/sh^M 이라는 오류 문구에 나와있듯이 ^M 문자 때문에 발생하는 오류이다.

문제가 발생하는 스크립트 파일에서 ^M 이라는 문자를 모두 지워야 한다.

 

# 해결

1) 바이너리 모드로 열어서 치환

# 파일열기
$ vi -b 파일명.sh

# 파일 내 존재하는 모든 ^M을 빈값으로 치환.
# 중요! ^+M 이 아니라 Ctrl+v+m으로 입력해야 한다.
:%s/^M//g

# 저장 및 vim 닫기
:wq!

2) 커맨드 화면에서 치환

# sed 명령어 사용하여 치환
sed 's/^M//g' < 파일명.sh

(!) 중요

치환하는 명령어를 입력할 때 ^M은 일반 문자가 아니기 때문에 ^+M을 입력하는게 아니라 Ctrl+v+m을 입력하면 ^M이 입력된다.

 

※ 참고

https://blog.gaerae.com/2016/02/remove-m-character-from-log-files.html

https://techlog.gurucat.net/297