我不明白为什么会出现此错误:
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
脚本的第一行有问题。
用
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,所以您在这里看到的是:
ENOEXEC在执行该脚本时返回,因为它不是可识别的可执行文件(它不是本机二进制可执行文件,也不是脚本,因为它不是以#!)。ENOEXEC调用sh它。sh读取并解释该文件。第一行不是注释,#前面没有空格,因此它确实尝试执行<BOM>#/bin/bash,并报告错误消息。