我继承了一些 bash 脚本,其中作者在函数名称中使用“-”而不是更常见的“_”,例如:
function a-b {
...
}
丑陋但在 bash 中合法。问题是我在一个暴发户脚本中找到了这个并得到了
x.sh:第 5 行:“ab”:不是有效的标识符
花了一段时间才意识到这是名称而不是函数内容。无论如何,在这种情况下重命名不是一个简单的选择,据我所知,暴发户使用/bin/sh
不/bin/bash
解析?运行它的脚本。因此我猜测这个问题。
除了重命名之外,还有其他解决方法吗?
如果没有别的事,至少我希望这个问题能够警告其他人关于奇怪的 bash 编码风格的危险以及它们有时会如何反咬你一口。
答案1
来自暴发户食谱,更改默认外壳。有 3 个选项,前 2 个涉及将默认 shell 更改为/bin/sh
其他选项。但第三个选项看起来可以解决您的特定问题。
摘抄
在您希望使用不同 shell 运行的作业配置文件中使用“此处文档”(假设您选择的 shell 支持它们):
script /bin/bash <<EOT echo "Hi - I am running under the bash shell" date echo "and so am I :)" EOT end script