.sh 파일을 실행할 수 없습니다 : / bin / bash ^ M : 잘못된 인터프리터


107

쉘 스크립트를 실행하고 싶었습니다.

-rwxr-x--x 1 root root   17234 Jun  6 18:31 create_mgw_3shelf_6xIPNI1P.sh

표준 절차를 시도했지만이 오류가 발생했습니다.

./create_mgw_3shelf_6xIPNI1P.sh 
localhost 389 -l /opt/fews/sessions/AMGWM19/log/2013-06-06-143637_CLA-0 
DEBUG   cd/etc/opt/ldapfiles/ldif_in ;
./create_mgw_3shelf_6xIPNI1P.sh 
localhost 389 -l /opt/fews/sessions/AMGWM19/log/2013-06-06-143637_CLA-0
**ERROR  sh: ./create_mgw_3shelf_6xIPNI1P.sh: /bin/bash^M: bad interpreter: No such file or directory**

무슨 뜻인가요? 나는 그룹 의 root사용자 로 이것을하고있었습니다 root.

파일에 root사용자에 대한 올바른 권한이 없음을 의미합니까 ?

답변:


182

이것은 권한 문제가 아니며 권한에 대한 메시지가 표시되지 않습니다

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

스크립트는에 위치한 쉘에 의해 실행되어야 함을 나타냅니다 /bin/bash^M. 이러한 파일은 없습니다 : /bin/bash.

^MA는 캐리지 리턴 문자 . Linux는 줄 바꿈 문자 를 사용하여 끝을 표시하지만 Windows는 두 문자 시퀀스 CR LF를 사용합니다. 파일에 Linux가 혼동되는 Windows 줄 끝이 있습니다.

가짜 CR 문자를 제거하십시오. 다음 명령을 사용하여 수행 할 수 있습니다.

sed -i -e 's/\r$//' create_mgw_3shelf_6xIPNI1P.sh

22
또는 dos2unix프로그램을 설치하여 사용하십시오 .
argentpepper

4
감사합니다. 지금까지 찾은 다른 모든 답변은 도움이되지 않았습니다. 이거 해냈어!
qodeninja

Windows가 아니어도 OS X에서 우분투로 스크립트를 복사 한 후 비슷한 메시지가 나타납니다 ... 파일에서 n '문자.
Michael

1
@Michael macOS는 \nUnix이므로 사용합니다 . 이 스크립트는 이전 Mac OS 버전에서 온 것일까 요? sed -i -e 's/\r$/\n/' script.sh그런 경우에 달릴 수 있습니다 .
wjandrea

1
gedit에서 열고 다른 이름으로 저장을하고 "Line Ending : Unix / Linux"를 선택하십시오
Mattmon

23

vim에서는 :set ff=unix파일을 사용한 다음 저장하거나 :set ff=dosDOS 형식을 다시 가져올 수도 있습니다 .


이것은 나를 위해 그것을했다 thx
bunkerdive

19

파일에 DOS / Windows 스타일 줄 끝 (CR LF) 이 있지만 Unix 계열 시스템에서는 LF 제어 문자 만 줄 바꿈으로 사용됩니다.

추가 CR 제어 문자^M출력 과 같이 인코딩 된 것으로 표시됩니다 . 당신은 또한 실행할 때 그것을 볼 수 있습니다 cat -A create_mgw_3shelf_6xIPNI1P.sh.

줄 끝을 DOS / Windows 스타일에서 Unix 스타일로 변환하기위한 도구가 dos2unix있습니다. 다음을 사용하여 설치합니다.

sudo apt-get install dos2unix

그런 다음 파일의 줄 끝을 두 가지 방법으로 간단히 변환 할 수 있습니다.

dos2unix FILENAME
unix2dos FILENAME

귀하의 경우 아래 명령을 실행하면 스크립트 파일이 제자리에서 변환됩니다.

dos2unix create_mgw_3shelf_6xIPNI1P.sh

그 후 Bash는 파일을 올바르게 해석 할 수 있어야합니다.


1
감사합니다. dos2unix는 brew를 통해 macOS에서도 사용할 수 있습니다.
Muhammad Annaqeeb

5

문제는 Dos로 편집하는 것이 아닙니다!

vi로 파일을 열고 다음을 사용하여 유닉스를 설정하십시오.

:set ff=unix
:wq

그리고 다 괜찮아


4

마십시오 vi <your script>.

그런 다음 :set list; 스크립트에 특수 문자가 표시됩니다.

그런 다음 문자를 바꾸십시오.

:%s/^M//gc [형으로 ^M프레스 Ctrl+ v+ m]


전역 대체보다 이것을 처리하는 데 더 나은 IMHO 인 : fileformat 사용에 대한 위의 답변을 참조하십시오. 또한 자동 처리 방법에 대한 아이디어는 stackoverflow.com/questions/14609779/… 를 참조하십시오
qneill

4

다른 답변에서 설명했듯이 이것은 형식 문제입니다. 따라서 대답은 형식을 DOS에서 Unix 스타일 줄 끝으로 변경하는 것입니다. 이것은 '제자리에'파일을 수정하는 또 다른 간단한 방법입니다.

fromdos file

패키지로 제공됩니다 tofrodos:

sudo apt-get install tofrodos

2

gedit를 사용하여 원하지 않는 문자를 제거 할 수도 있습니다. 파일 메뉴에서 다른 이름으로 저장을 선택하고 라인 엔드 유형 unix / Linux를 설정하십시오.


MacOS 라인 엔딩에 도움이 되었기 때문에 +1입니다.
Bobble
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.