【问题标题】:Bash script doesn't work without shebang BUT the shebang results in an error message如果没有 shebang,Bash 脚本将无法工作,但是 shebang 会导致错误消息
【发布时间】:2016-05-03 04:43:38
【问题描述】:

我正在尝试在 CentOS 6 中运行 bash 脚本。如果没有 shebang 标头,它就无法工作。但是,当我包含 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 确实存在。我尝试了一系列其他shebangs并得到了相同的结果。我什至尝试了一些明显无效的东西,即#!/fake/path,结果是一样的!

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

【问题讨论】:

  • 运行bash /home/myusername/bin/test.sh时会发生什么?
  • 刚试过。同样的事情。
  • 也试过 /bin/bash /home/myusername/bin/test.sh
  • 文件中的字符可能听起来很时髦。尝试删除文件的第一行并再次运行,在命令行调用中显式使用 bash。
  • 好建议,但我已使用 Notepad++ 对其进行了编辑,显示所有字符。没有时髦的字符。

标签: linux bash centos shebang


【解决方案1】:

你有一个编码问题。

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

文本编辑器或网络浏览器将文本误解为 ISO-8859-1 或 CP1252 将为此显示字符 。

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

【讨论】:

  • 我在 Notepad++ 中检查了我的编码。它被设置为 UTF-8-BOM。我将其更改为 UTF-8。这解决了它!
猜你喜欢
  • 2012-04-14
  • 1970-01-01
  • 1970-01-01
  • 2023-04-05
  • 2015-03-04
  • 2021-10-10
  • 1970-01-01
  • 2023-04-08
相关资源
最近更新 更多