意外令牌附近的语法错误`='()

时间:2016-03-15 22:46:21

标签: bash sh

我在bash shell上运行了一些遗留代码,我无法理解/通过这一行:

BASH_FUNC_module()='() {  eval `/usr/bin/modulecmd bash $*`
}'; export BASH_FUNC_module()

我得到的错误是:

line 364: syntax error near unexpected token `='() {  eval `/usr/bin/modulecmd bash $*`
}''
line 364: `}'; export BASH_FUNC_module()'

任何指针都会受到赞赏,我是shell的新手:)谢谢!

3 个答案:

答案 0 :(得分:2)

看起来你正在尝试转换bash的一些跟踪/转储输出。你很可能想要:

module() { eval `/usr/bin/modulecmd bash $*`; }
export -f module

应该适用于旧版本/新版本的bash。

答案 1 :(得分:0)

您错误地组合了赋值和函数定义的语法。

BASH_FUNC_module='() { eval `/usr/bin/modulecmd bash $*`; }'
export BASH_FUNC_module

答案 2 :(得分:0)

Mike Frysinger正确描述了问题原因。但是,解决问题通常需要以下几个步骤之一:

  • 卸载有问题的软件包,通常名为 environment-modules
  • 修改遗留代码,跳过以" BASH_FUNC _ ",
  • 开头的环境变量
  • 在使用以下代码运行旧代码之前将其从您的环境中删除:unset -f module

更一般地说,要取消设置所有导出的功能,您可以使用以下内容:

unset -f $(env | awk '/^BASH_FUNC_/{sub("[(].*","");print substr($0,11)}')

当然:

  • 卸载软件包不会改变当前的shell。
  • unset -f命令还具有从当前shell中删除函数的效果。