Linux Bash 쉘 스크립트 오류: 실행할 수 없습니다: 필요한 파일을 찾을 수 없습니다.

Linux Bash 쉘 스크립트 오류: 실행할 수 없습니다: 필요한 파일을 찾을 수 없습니다.

이름이 다른 두 개의 유사한 스크립트가 있습니다. 하나는 잘 작동하지만 다른 하나는 오류가 발생합니다. 누구든지 무엇이 잘못되었는지 말해 줄 수 있나요?

이것은 내 test.sh 스크립트입니다. 잘 작동합니다.

[nnice@myhost Scripts]$ cat test.sh 
#!/bin/bash
function fun {     
        echo "`hostname`"
}
fun 
[nnice@myhost Scripts]$ ./test.sh 
myhost.fedora

여기 또 다른 스크립트인 데모.sh가 있지만 오류가 발생합니다.

[nnice@myhost Scripts]$ cat demo.sh 
#!/bin/bash
function fun { 
    echo "`hostname`"
}
fun
[nnice@myhost Scripts]$ ./demo.sh 
bash: ./demo.sh: cannot execute: required file not found

두 스크립트 모두 동일한 권한을 갖습니다.

[nnice@myhost Scripts]$ ll test.sh 
-rwxr-xr-x. 1 nnice nnice 65 Oct 21 10:47 test.sh
[nnice@myhost Scripts]$ ll demo.sh 
-rwxr-xr-x. 1 nnice nnice 58 Oct 21 10:46 demo.sh

답변1

귀하의 demo.sh스크립트는 DOS 텍스트 파일입니다. 이러한 파일에는 CRLF 줄 끝이 있으며 줄 끝에 추가 CR(캐리지 리턴) 문자가 있으면 문제가 발생할 수 있습니다.

이것특정한이것이 일으키는 문제는 #!라인의 인터프리터 경로명이 이제 호출된 것을 참조한다는 것입니다 /bin/bash\r( \r공백과 유사한 문자인 캐리지 리턴 문자로 기호화되므로 일반적으로 표시되지 않음). 파일을 찾을 수 없어서 오류 메시지가 발생했습니다.

이 문제를 해결하려면 스크립트를 DOS 텍스트 파일에서 Unix 텍스트 파일로 변환하십시오. Windows에서 스크립트를 편집하는 경우 Unix 텍스트 파일을 생성하도록 Windows 텍스트 편집기를 구성하여 이를 수행할 수 있지만 dos2unix가장 일반적인 Unix 변형에 대한 유틸리티를 사용할 수도 있습니다.

$ ./script
bash: ./script: cannot execute: required file not found
$ dos2unix script
$ ./script
harpo.local

코드와 관련하여 다음 명령을 실행 echo `some-command`하거나 echo $(some-command)출력 하지 마십시오 some-command.

#!/bin/sh

fun () {
    hostname
}

fun

(이제 스크립트는 필요한 것을 사용하지 않기 때문에 bash더 간단한 쉘을 호출하는 것으로 옮겼습니다 /bin/sh.)

답변2

(검색이 여기서 끝났으므로) test.sh가 있습니다.

#!/bin/bash
echo "test"

NixOS에 복사해서 얻었습니다.

-bash: ./test.sh: cannot execute: required file not found

Windows 캐리지 리턴을 제거하기 위해 기본 vim 방법을 시도했습니다.

:e ++ff=unix 
:%s/\r\(\n\)/\1/g

그러나 이것은 도움이 되지 않습니다.

첫 번째 줄을 다음으로 변경했습니다.

#!/usr/bin/env bash

이제 괜찮아.

로 바꿀 수도 있었을 텐데

#!/bin/sh

나는 bashism을 사용하지 않고 다른 스크립트를 사용하고 있기 때문에예전에는그래서 bash를 호출할 수 있는 좋은 이식 가능한 방법이 필요합니다.

답변3

notepad++파일을 열었을 때 파일 오른쪽 하단에 캐리지 리턴( )이 보이면 더블클릭하여 "유닉스( )"로 변경하시면 됩니다.CL RFLF

아래 그림을 참고하세요

답변4

제 경우에는 Windows에서 이 shebang을 #! /user/bin/bash대신 사용하려고 했기 때문에 이런 문제가 발생했습니다 #!/bin/bash.

관련 정보