#!/bin/bash: 没有那个文件或目录

doc*_*ori 6 bash debian

我不明白为什么会出现此错误:

line 1: #!/bin/bash: No such file or directory
Run Code Online (Sandbox Code Playgroud)

在运行任何像这样的 bash 脚本时:

#!/bin/bash
echo "pouet"
Run Code Online (Sandbox Code Playgroud)

我试过在 Fedora 19 上运行它,一切顺利。

我在 Debian 7 上,我尝试解析要搜索的第一行,\n\r但一切都很干净(到目前为止我制作的每个脚本似乎都以相同的方式运行)。

$PATH是这样的:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin。我用普通用户或 root 尝试过,结果相同。但脚本的其余部分似乎表现正常(回显被解释)。是的,/bin/bash存在并且是可执行的。

编辑:

$ LC_ALL=C sed -n l < tesT.sh
\357\273\277#!/bin/bash$
echo "pouet"$
Run Code Online (Sandbox Code Playgroud)

mic*_*has 15

请参阅#!/bin/bash - 没有这样的文件或目录

脚本的第一行有问题。

head -n 1 yourscript | LC_ALL=C od -tc
Run Code Online (Sandbox Code Playgroud)

或者:

LC_ALL=C sed -n 'l;q' your-script
Run Code Online (Sandbox Code Playgroud)

找出问题所在。

如果输出以357 273 277它开头,则它是一个 UTF8字节顺序标记。在vim你可以用set nobomb它来删除它。

内核(解释 she-bang 行)和您的系统sh(为没有 she-bang 的脚本调用)都无法识别该 BOM,所以您在这里看到的是:

  1. 内核ENOEXEC在执行该脚本时返回,因为它不是可识别的可执行文件(它不是本机二进制可执行文件,也不是脚本,因为它不是以#!)。
  2. 您的交互式 shell 会ENOEXEC调用sh它。
  3. sh读取并解释该文件。第一行不是注释,#前面没有空格,因此它确实尝试执行<BOM>#/bin/bash,并报告错误消息。