![Linux Bash 쉘 스크립트 오류: 실행할 수 없습니다: 필요한 파일을 찾을 수 없습니다.](https://linux55.com/image/212383/Linux%20Bash%20%EC%89%98%20%EC%8A%A4%ED%81%AC%EB%A6%BD%ED%8A%B8%20%EC%98%A4%EB%A5%98%3A%20%EC%8B%A4%ED%96%89%ED%95%A0%20%EC%88%98%20%EC%97%86%EC%8A%B5%EB%8B%88%EB%8B%A4%3A%20%ED%95%84%EC%9A%94%ED%95%9C%20%ED%8C%8C%EC%9D%BC%EC%9D%84%20%EC%B0%BE%EC%9D%84%20%EC%88%98%20%EC%97%86%EC%8A%B5%EB%8B%88%EB%8B%A4..png)
이름이 다른 두 개의 유사한 스크립트가 있습니다. 하나는 잘 작동하지만 다른 하나는 오류가 발생합니다. 누구든지 무엇이 잘못되었는지 말해 줄 수 있나요?
이것은 내 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
답변4
제 경우에는 Windows에서 이 shebang을 #! /user/bin/bash
대신 사용하려고 했기 때문에 이런 문제가 발생했습니다 #!/bin/bash
.