쉘 스크립트를 실행하고 싶었습니다.
-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
사용자에 대한 올바른 권한이 없음을 의미합니까 ?
답변
이것은 권한 문제가 아니며 권한에 대한 메시지가 표시되지 않습니다
/bin/bash^M: bad interpreter: No such file or directory
스크립트는에 위치한 쉘에 의해 실행되어야 함을 나타냅니다 /bin/bash^M
. 이러한 파일은 없습니다 : /bin/bash
.
는 ^M
A는 캐리지 리턴 문자 . Linux는 줄 바꿈 문자 를 사용하여 줄 끝을 표시하지만 Windows는 두 문자 시퀀스 CR LF를 사용합니다. 파일에 Linux가 혼동되는 Windows 줄 끝이 있습니다.
가짜 CR 문자를 제거하십시오. 다음 명령을 사용하여 수행 할 수 있습니다.
sed -i -e 's/\r$//' create_mgw_3shelf_6xIPNI1P.sh
답변
vim에서는 :set ff=unix
파일을 사용한 다음 저장하거나 :set ff=dos
DOS 형식을 다시 가져올 수도 있습니다 .
답변
파일에 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는 파일을 올바르게 해석 할 수 있어야합니다.
답변
문제는 Dos로 편집하는 것이 아닙니다!
vi로 파일을 열고 다음을 사용하여 유닉스를 설정하십시오.
:set ff=unix
:wq
그리고 다 괜찮아
답변
마십시오 vi <your script>
.
그런 다음 :set list
; 스크립트에 특수 문자가 표시됩니다.
그런 다음 문자를 바꾸십시오.
:%s/^M//gc
[형으로 ^M
프레스 Ctrl+ v+ m]
답변
다른 답변에서 설명했듯이 이것은 형식 문제입니다. 따라서 대답은 형식을 DOS에서 Unix 스타일 줄 끝으로 변경하는 것입니다. 이것은 ‘제자리에’파일을 수정하는 또 다른 간단한 방법입니다.
fromdos file
패키지로 제공됩니다 tofrodos
:
sudo apt-get install tofrodos
답변
gedit를 사용하여 원하지 않는 문자를 제거 할 수도 있습니다. 파일 메뉴에서 다른 이름으로 저장을 선택하고 라인 엔드 유형 unix / Linux를 설정하십시오.