示例脚本:
#!/usr/bin/env bash
echo "abc"
Bash 版本 4.1.2(1)-release 的输出:
$ ./a.bash
bash: BASH_FUNC_module(): line 0: syntax error near unexpected token `)'
bash: BASH_FUNC_module(): line 0: `BASH_FUNC_module() () { eval `/usr/bin/modulecmd bash $*`'
bash: error importing function definition for `BASH_FUNC_module'
abc
Bash 版本 3.2.25(1)-release 的输出:
$ ./a.bash
abc
有趣的是,它们都有效,但我想删除那条丑陋的消息。
我认为这与 Shellshock 补丁有关,但我需要一些帮助来确认。
我进行了一些 Google 搜索,大多数页面都指出了 Shellshock 修补后 Bash 的行为,但我不知道正确的解决方法。
- 参考:https://web.archive.org/web/20180125182654/https://rc.fas.harvard.edu/shellshock-update-issue-temporarily-affecting-slurm-jobs-software-modules/
- 参考文献2:https://bugzilla.redhat.com/show_bug.cgi?id=1147043
这个问题的解决方法是什么?
我在一家“大型公司”工作,因此对已安装软件包的控制为零。
答案1
唯一立即明显的错误是有人做了eval `/usr/bin/modulecmd bash $*`
。代码中怪异之处太多,无法详述(真的需要eval
,为什么是老式的反引号,为什么$*
不使用$@
,以及为什么任何地方都没有引号),但看起来你可能有一个严重残疾的外壳需要处理。
答案2
自从我开始使用“环境模块”以来,我也遇到了同样的问题。解决方案(至少对我来说)是更新 bash 我一直使用 bash 4.1.2-15.el6,并使用以下命令更新到 bash 4.1.2-29.el6:yum update bash 显然,您可能无法说服“大型公司”进行更新,但考虑到对 shellshock 的担忧,他们可能会听您的?