Linux Bash Shell 脚本错误:无法执行:找不到所需文件

Nit*_*mar 8 linux scripting bash fedora shell-script

我有两个类似的脚本,但名称不同。一个工作正常,但另一个会抛出错误。谁能告诉我有什么问题吗?

这是我的 test.sh 脚本,运行良好

[nnice@myhost Scripts]$ cat test.sh 
#!/bin/bash
function fun {     
        echo "`hostname`"
}
fun 
[nnice@myhost Scripts]$ ./test.sh 
myhost.fedora
Run Code Online (Sandbox Code Playgroud)

这是我的另一个脚本 demo.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
Run Code Online (Sandbox Code Playgroud)

两个脚本具有相同的权限

[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
Run Code Online (Sandbox Code Playgroud)

Kus*_*nda 20

您的demo.sh脚本是一个 DOS 文本文件。此类文件具有 CRLF 行结尾,并且行末尾的额外 CR(回车)字符会导致出现问题。

它引起的具体问题是#!- 行上的解释器路径名现在引用了名为的东西/bin/bash\r(象征\r着回车符,这是一个类似空格的字符,因此通常不可见)。找不到该文件,因此这就是导致错误消息的原因。

要解决此问题,请将脚本从 DOS 文本文件转换为 Unix 文本文件。如果您在 Windows 上编辑脚本,则可以通过配置 Windows 文本编辑器来创建 Unix 文本文件来完成此操作,但您也可以使用dos2unix适用于大多数常见 Unix 变体的实用程序。

$ ./script
bash: ./script: cannot execute: required file not found
Run Code Online (Sandbox Code Playgroud)
$ dos2unix script
$ ./script
harpo.local
Run Code Online (Sandbox Code Playgroud)

关于您的代码:请不要执行echo `some-command`echo $(some-command)输出some-command. 直接使用命令即可:

#!/bin/sh

fun () {
    hostname
}

fun
Run Code Online (Sandbox Code Playgroud)

(由于脚本现在不使用任何需要的东西bash,我也转向调用更简单的/bin/shshell。)