意外标记 `='() 附近的语法错误

Syntax error near unexpected token `='()

我 运行 在 bash shell 上有一些遗留代码,我在 understanding/passing 通过这条线遇到了麻烦:

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 的新手 :) 谢谢!

您似乎在尝试转换 bash 的某些 trace/dump 输出。您很可能想要:

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

应该适用于 old/new 版本的 bash。

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

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

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

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

更一般地说,要取消设置所有导出的函数,您可以使用以下命令:

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

当然:

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