수정: Linux의 "잘못된 해석기: 그러한 파일 또는 디렉터리 없음" 오류

게시 됨: 2023-05-01
Cherry KW 9200 미니 키보드로 타이핑하는 사람
Hannah Stryker / 하우투 긱
쉘 스크립트를 실행할 때 "잘못된 인터프리터: 해당 파일이나 디렉토리가 없습니다" 오류가 발생하면 스크립트 파일을 Windows에서 Unix 줄 끝으로 변환해야 합니다. 한 가지 방법은 다음과 같이 dos2unix 명령을 사용하는 것입니다.

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 줄 끝을 보고 쉘이 스크립트를 제대로 해석하지 못하도록 하기 때문에 화를 냅니다.

Linux 명령줄에 "잘못된 인터프리터: 해당 파일 또는 디렉터리가 없습니다" 오류 메시지가 표시됩니다.

file 명령을 스크립트에 지정하여 Linux 터미널에서 문제를 확인할 수도 있습니다.

 파일 script1.sh 

Linux에서 file 명령으로 파일의 줄 끝을 확인합니다.

파일이 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 

dos2unix 명령을 입력합니다.

스크립트를 실행하기 전에 변환이 성공했는지 확인하려면 file 로 확인하십시오. 공백으로만 구분된 여러 파일의 이름을 지정하여 대량 변환할 수도 있습니다.

 dos2unix script1.sh script2.sh script3.sh

또는 일관된 파일 이름이 있는 경우 와일드카드를 사용하여 더 짧은 명령을 작성할 수 있습니다.

 dos2unix 스크립트*.sh 

와일드카드로 변환하려면 dos2unix 명령에 별표를 사용하십시오.

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 줄 끝으로 변환하십시오.

 :설정 파일 형식=유닉스 

vim 명령으로 스크립트 파일 형식을 변경합니다.

관련: Vi 또는 Vim 편집기를 종료하는 방법

Geany 사용

데스크톱 환경에서 작업하는 경우 파일을 Unix 환경에 맞게 준비하기 위해 터미널에서 장난을 칠 이유가 없습니다. 거의 모든 코드 편집기와 IDE에는 줄 끝을 위한 토글이 있습니다. 여기에는 Geany가 포함됩니다.

Geany에서 줄 끝을 변환하려면 문서 > 줄 끝 설정 > 변환 및 LF로 설정(Unix)으로 이동합니다.

Geany의 Document 메뉴에서 "Set Line Endings"로 이동하여 "Convert and Set to LF (Unix)"를 선택합니다.

스크립트를 저장하고 다시 실행해 보십시오.

Kate 또는 Kwrite 사용

Kwrite를 사용하여 스크립트를 편집하거나 Kwrite의 더 강력한 사촌인 Kate를 사용하는 경우 도구 > 줄 끝 > Unix를 클릭하여 LF 형식으로 변환할 수 있습니다.

Kwrite의 도구 메뉴에서 "End of Line"을 열고 "Unix"를 선택합니다.

파일을 저장하고 스크립트를 다시 실행하십시오.

메모장++ 사용

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"으로 변경합니다.

VS Code 설정에서 기본 EOL 설정을 "\n"으로 변경합니다.

관련: Bash 스크립트 하드웨어를 인식시키는 방법