Windows 줄 끝이 있는 파일에 대한 오류를 제공하도록 bash를 얻으려면 어떻게 해야 합니까?

Windows 줄 끝이 있는 파일에 대한 오류를 제공하도록 bash를 얻으려면 어떻게 해야 합니까?

다음과 같은 쉘 스크립트가 있다고 가정해 보겠습니다.

#!/bin/bash \n
echo "Hello World" \n

실행하면

Hello world. 

이제 다음 쉘 스크립트가 있다고 가정합니다.

#!/bin/bash \r\n
echo "Hello world" \r\n

실행하면 다음과 같은 결과가 나타납니다.

bad interpreter: No such file or directory

초보자의 경우 - 이것은 실제로 문제의 원인을 가리키지는 않습니다(원인이 공백이라고 가정). 당신이 정말로 원하는 것은 문제가 무엇인지 알려주는 오류입니다.

내 질문은 다음과 같습니다Windows 줄 끝이 있는 파일에 대한 오류를 제공하도록 bash를 얻으려면 어떻게 해야 합니까?

편집하다:

여기서의 맥락은 누군가가 파일을 보고 줄 끝을 보지 못했고 의도치 않게 이런 일이 발생했다는 것입니다. Unix의 텍스트 파일과 Windows의 텍스트 파일의 차이점에 대해 질문했을 때 그들은 "무슨 뜻입니까? 일반 텍스트일 뿐입니까?"라고 대답했습니다. 이 질문은 사용자에게 문제의 근본 원인을 살펴보도록 유도하기 위한 것입니다.

답변1

문제는 bash가 실행되기 전에 오류가 발생한다는 것입니다.

#!then으로 시작하는 스크립트를 실행하면핵심나머지 줄을 살펴보고 파일 이름을 첫 번째 인수로 사용하여 실행하세요. 따라서 DOS 형식의 파일이 있으면 커널은 이를 보고 /bin/bash^M프로그램으로 실행하려고 시도합니다. 물론 이것은 존재하지 않습니다.

조금 미치고 싶다면할 수 있다/bin/bash^M라는 프로그램을 만들어 보세요..

$ ls -lb /bin/bash?
-rwxr-xr-x 1 root root 61 Jun 18 22:41 /bin/bash\r

$ cat /bin/bash?
#!/bin/sh
echo Convert your program to Unix format!
exit 255

$ file foo
foo: Bourne-Again shell script, ASCII text executable, with CRLF line terminators

$ cat -v foo
#!/bin/bash^M
echo hello^M

$ ./foo
Convert your program to Unix format!

$ dos2unix foo
dos2unix: converting file foo to Unix format ...

$ ./foo
hello

그래도 이것을 추천할지는 잘 모르겠습니다!

file대신 교육 및 진단 "실행서"(예: CRLF 줄 종결자를 보고하는 명령)를 권장합니다 .

관련 정보