수정: Linux의 "잘못된 해석기: 그러한 파일 또는 디렉터리 없음" 오류
게시 됨: 2023-05-01dos2unix
명령을 사용하는 것입니다.dos2unix script1.sh
Bash 스크립트를 실행하려고 했을 때 "/bin/bash^M: 잘못된 인터프리터: 해당 파일 또는 디렉토리가 없습니다" 오류 메시지가 표시됩니까? 출력은 별로 도움이 되지 않으며 스크립트가 누락된 것 같은 인상을 줍니다. 다행히도 그렇지 않으며 수정은 매우 간단합니다.
"Bad Interpreter: No Such File or Directory" 오류는 무엇입니까?
"잘못된 해석기: 그러한 파일 또는 디렉터리 없음" 오류를 수정하는 방법
dos2unix 명령 사용
tr 명령 사용
sed 명령 사용
vi 또는 vim 사용
Geany 사용
Kate 또는 Kwrite 사용
메모장++ 사용
VS 코드 사용
"Bad Interpreter: No Such File or Directory" 오류는 무엇입니까?
/bin/bash^M: bad interpreter: No such file or directory
오류 메시지는 쉘 스크립트 파일의 줄 끝이 잘못되었음을 의미합니다. 다음 줄. DOS 기반 Windows는 \r\n
으로 표시된 "CRLF(캐리지 리턴 및 줄 바꿈)" 터미네이터를 보는 것을 좋아합니다. 반대로 Linux, 최신 macOS 및 기타 Unix 기반 시스템은 "줄 바꿈"(LF) 또는 \n
만 사용합니다.
이 잘못된 인터프리터 오류가 표시되는 경우 귀하 또는 스크립트를 받은 사람이 원래 Windows 컴퓨터에서 스크립트를 작성했을 가능성이 있습니다. Bash는 Windows 컴퓨터에서 설정한 \r\n
줄 끝을 보고 쉘이 스크립트를 제대로 해석하지 못하도록 하기 때문에 화를 냅니다.
file
명령을 스크립트에 지정하여 Linux 터미널에서 문제를 확인할 수도 있습니다.
파일 script1.sh
파일이 DOS 줄 끝을 사용하는 경우 출력에 "with CRLF 줄 종결자"라는 메시지가 추가된 것을 볼 수 있습니다. 스크립트가 적절한 Unix(LF) 개행을 사용하고 있었다면 터미네이터를 전혀 언급하지 않았을 것입니다. 다행히도 LF 비즈니스로 돌아가는 것은 쉽습니다.
"잘못된 해석기: 그러한 파일 또는 디렉터리 없음" 오류를 수정하는 방법
오류 메시지를 제거하고 정상적으로 스크립트 실행을 시작하려면 DOS 줄 끝에서 Unix 줄 끝으로 전환하기만 하면 됩니다. 터미널 명령이나 선호하는 코드 편집기를 사용하여 이 작업을 수행할 수 있습니다. 문제를 해결하는 8가지 방법은 다음과 같습니다.
dos2unix 명령 사용
DOS(일명 Windows) 파일을 dos2unix
라는 이름의 완전한 Unix 호환 파일로 변환하기 위해 만들어진 명령줄 프로그램이 있습니다. 대부분의 기본 리포지토리에서 사용할 수 있으므로 다음을 사용하여 Ubuntu에 설치할 수 있습니다.
sudo apt 설치 dos2unix
Fedora 설치에는 dos2unix
사전 설치되어 있지만 다음을 통해 확인할 수 있습니다.
sudo dnf 설치 dos2unix
아치 리눅스:
sudo 팩맨 -S dos2unix
dos2unix
사용하는 것은 간단합니다. 파일 이름을 지정하십시오.
dos2unix script1.sh
스크립트를 실행하기 전에 변환이 성공했는지 확인하려면 file
로 확인하십시오. 공백으로만 구분된 여러 파일의 이름을 지정하여 대량 변환할 수도 있습니다.
dos2unix script1.sh script2.sh script3.sh
또는 일관된 파일 이름이 있는 경우 와일드카드를 사용하여 더 짧은 명령을 작성할 수 있습니다.
dos2unix 스크립트*.sh
dos2unix
명령에는 파일 소유권 변경과 같은 특별한 종류의 변환을 수행하는 데 도움이 되는 몇 가지 플래그가 있습니다. CRLF로 다시 전환하려는 경우 unix2dos
역 형식으로 사용할 수도 있습니다. 자세한 내용을 보려면 dos2unix --help
입력하십시오.
tr 명령 사용
전용 유틸리티를 설치할 수 없거나 설치하고 싶지 않은 경우 Linux에는 해당 줄 바꿈을 정리하는 도구가 내장되어 있습니다. tr
명령을 사용하면 줄 끝의 \r
부분을 제거하여 \n
종료자로 남을 수 있습니다.
tr -d '\r' < script1.sh > script1_unix.sh
여기에서 tr
script1.sh
파일의 텍스트를 가져오고 발견한 \r
의 모든 인스턴스를 삭제하고 출력을 script1_unix.sh
파일로 저장합니다.
sed 명령 사용
쉘에 내장된 강력한 sed
명령은 파일의 줄 끝을 변경할 수도 있습니다.
세드 -i 's/\r//' script1.sh
sed
구문에 익숙하지 않은 경우 sed
파일( -i
)을 편집하고 각 캐리지 리턴( \r
)을 아무 것도 대체( s/
)하지 말라고 합니다. 그러면 Unix에서 선호하는 \n
줄 종결자가 남습니다.
vi 또는 vim 사용
vi 또는 vim을 사용하여 스크립트를 편집하는 경우 이 명령을 전달하여 현재 열려 있는 파일을 Unix 줄 끝으로 변환하십시오.
:설정 파일 형식=유닉스
관련: Vi 또는 Vim 편집기를 종료하는 방법
Geany 사용
데스크톱 환경에서 작업하는 경우 파일을 Unix 환경에 맞게 준비하기 위해 터미널에서 장난을 칠 이유가 없습니다. 거의 모든 코드 편집기와 IDE에는 줄 끝을 위한 토글이 있습니다. 여기에는 Geany가 포함됩니다.
Geany에서 줄 끝을 변환하려면 문서 > 줄 끝 설정 > 변환 및 LF로 설정(Unix)으로 이동합니다.
스크립트를 저장하고 다시 실행해 보십시오.
Kate 또는 Kwrite 사용
Kwrite를 사용하여 스크립트를 편집하거나 Kwrite의 더 강력한 사촌인 Kate를 사용하는 경우 도구 > 줄 끝 > Unix를 클릭하여 LF 형식으로 변환할 수 있습니다.
파일을 저장하고 스크립트를 다시 실행하십시오.
메모장++ 사용
Notepad++에서 코드를 편집하는 경우 줄 끝을 쉽게 변환할 수도 있습니다. 이는 Linux용 Notepad++를 설치하지 않은 경우 Windows에서 실행할 가능성이 높기 때문에 편리하고 Linux 시스템으로 이동하기 전에 변환할 수 있습니다. 파일을 연 상태에서 편집 > EOL 변환 > Unix(LF)로 이동합니다.
실행하기 전에 스크립트를 저장하십시오.
Notepad++에서 기본적으로 Unix 줄 끝이 있는 파일을 만들려면 설정 > 기본 설정으로 이동하여 "새 문서" 탭을 선택하고 "형식(줄 끝)" 옵션 아래에서 "Unix(LF)" 라디오 버튼을 클릭합니다.
VS 코드 사용
Visual Studio Code(VS Code)는 거의 동일한 방식으로 작동하며 토글만 더 쉽게 찾을 수 있습니다. VS Code 창의 오른쪽 하단에 있는 "CRLF"를 클릭하기만 하면 됩니다.
파일 > 기본 설정 > 설정으로 이동하고 설정 검색 표시줄에 eol
입력하여 기본적으로 Unix 줄 끝을 사용하도록 VS Code를 설정할 수도 있습니다. 맨 위 결과는 "Eol"을 설정하기 위한 드롭다운 메뉴여야 합니다. "\n"으로 변경합니다.
관련: Bash 스크립트 하드웨어를 인식시키는 방법