我试图从命令行运行我的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"