Shell脚本:没有找到新行命令



我试图从命令行运行我的shell脚本,让我们说;

我的脚本是这样的:

#!bin/bash
echo hello

当尝试运行这个source ./abcd.sh时,我得到这个错误。

"' is not a typo you can run the following command to lookup the package that contains the binary:
    command-not-found 
: command not found
hello
"

从来没有见过这个在"echo hello"之前有一个空行有问题吗?我想知道是否有人遇到过这样的事情。

随着脚本的第一行是注释,听起来您的文件有DOS行结尾,并且回车被视为未找到的命令。这个错误信息听起来像一个自定义的command_not_found_handle函数(我相信Ubuntu定义)提供的东西。

#!bin/bash

必须是

#!/bin/bash

或任何安装了bash的地方(您可以通过执行whereis bash来定位它)。

当使用bash(即bash ./abcd.sh)调用时,您的程序应该可以正常工作,但是当直接执行./abcd.sh时,那么hashbang行确实很重要,因为这就是解释器如何定位可执行文件中包含的脚本。

试试echo 'hello',在引号内。看起来在echo命令和hello命令之间有一个换行符,并且它试图将'hello'作为命令运行。

散列行应该是#!/bin/bash,但是弄乱了也没关系,因为它会将任何以散列开头的行解释为注释。

使用调试选项运行脚本,查看哪一行实际失败:

bash -x abcd.sh
注意:在这种情况下,Shebang行将被视为注释,所以如果脚本的其余部分是正确的,它将正确执行:
$ bash -x abcd.sh
+ echo hello
hello

确保您的文件没有BOM我在Windows下用notepad++编辑脚本时也遇到了同样的问题。请务必转换为"UTF-8 without BOM"

最新更新