【问题标题】:Running a Bash script results in 'Bad interpreter: No such file or directory' error运行 Bash 脚本会导致“错误的解释器:没有这样的文件或目录”错误
【发布时间】:2017-06-14 13:28:06
【问题描述】:

我确实在

上找到了问题

错误的解释器:SO 上没有这样的文件或目录

当我从

更改脚本时,我的问题也得到了解决
#!/usr/bin/bash
echo -e "\t\t\e[92mHello from the Test Script!\e[39m"

到:

#!/bin/bash
echo -e "\t\t\e[92mHello from the Test Script!\e[39m"

之后 我从在这里寻找答案做了第一行更改。

Shell script: Bad interpreter.No such file or directory

我不明白为什么从第一行删除 /usr 会有帮助。

P.S.我正在学习 linux 文件权限,即使使用“755”更改权限后,我也无法执行我的文件。 所以,如果有人可以解释一下,请提前谢谢。:)

【问题讨论】:

  • 为什么这被否决了?我投了赞成票,因为虽然英语可能会更好,但它是可以理解的。

标签: linux bash shell file-permissions


【解决方案1】:

这是因为/usr/bin/bash 没有 bash 二进制文件,而 bash 的正确路径是 /bin/bash

脚本顶部的 #! 行,称为 shebang,确定用于运行脚本的程序(sh、bash、ruby、perl、python 等)。

这篇文章很好地涵盖了这个主题:

https://unix.stackexchange.com/questions/87560/does-the-shebang-determine-the-shell-which-runs-the-script

【讨论】:

    【解决方案2】:

    在您的系统上,bash shell 位于 /bin/bash 而不是 /usr/bin/bash

    ! 之后的路径应该是可执行文件的路径,该可执行文件将作为参数传递脚本的内容。

    您可以在wikipedia阅读更多相关信息

    关于你问题的第二部分;权限是什么并不重要;因为文件指向错误的解释器。

    有关 unix 文件权限的更多信息,我建议阅读this entry on wikipedia

    【讨论】:

      【解决方案3】:

      在我的例子中,在脚本名称之前添加 sh 解决了这个问题。

      【讨论】:

      • 这样做是覆盖shebang #!/usr/bin/bash(shebang 用于指定解释器)并使用shell (/bin/sh) 显式执行脚本。 which sh 会告诉你这确实是路径。 which bash 也是如此。
      【解决方案4】:

      您也可以通过在开头添加“./”来调用您的脚本,以防您从本地目录调用它。另一种解决方案是通过指定其完整路径来调用它。

      【讨论】:

      • 这没什么区别,因为 shebang (#!/usr/bin/bash) 仍然是脚本的(错误的)解释器。当您在脚本所在的目录中时使用此方法。$PATH 不会(不应)包含“.” (即当前目录)。因此,./script.sh 是在说“在当前目录中执行此脚本”。
      猜你喜欢
      • 2012-12-22
      • 2015-09-01
      • 1970-01-01
      • 2019-10-12
      • 1970-01-01
      • 2017-08-15
      • 2015-10-05
      相关资源
      最近更新 更多