Bash 脚本在没有 shebang 的情况下无法运行,但是 shebang 导致错误消息

Bash script doesn't work without shebang BUT the shebang results in an error message

我正在尝试 运行 CentOS 6 中的 bash 脚本。没有 shebang header 它就无法工作。但是,当我包含 shebang 时,它会显示一条错误消息!

这是一个名为 test.sh 的脚本。我把它放在我的 $HOME/bin 目录中。我 运行 chmod 777 就可以消除任何权限问题。我确认它使用的是 Unix 行结尾...

test_var=test
echo $test_var

我是这样执行的:

sh ~/bin/test.sh

我从中得到以下结果:

/home/myusername/bin/test.sh: line 1: test_var=test: command not found

现在我添加了一个shebang,所以脚本变成了:

#!/bin/bash
test_var=test
echo $test_var

当我 运行 时,我得到:

/home/myusername/bin/test.sh: line 1: #!/bin/bash: No such file or directory
test

所以添加 shebang 后分配变量没有问题,但它不喜欢同时添加 shebang!

我查了一下 /bin/bash 确实存在。我尝试了 collection 其他 shebangs 并得到了相同的结果。我什至尝试了一些明显无效的东西,即 #!/fake/path,结果是一样的!

脚本不会 运行 如果不添加 shebang(无论它是什么),但它会抱怨 shebang(无论它是什么)!

您遇到了编码问题。

看:https://en.wikipedia.org/wiki/Byte_order_mark#UTF-8

A text editor or web browser misinterpreting the text as ISO-8859-1 or CP1252 will display the characters  for this.

将您的文件保存为不带 BOM 的 UTF-8 或使用系统编辑器(vi,...)