我在将bash命令重构为tcsh-friendly命令时遇到问题。不太了解tcsh语法,因此收到的错误不会给我任何提示。
整个bash脚本是关于在服务器上添加模块
MODULEPATH=/app/modules/0/modulefiles:/env/common/modules
export MODULEPATH
module() { eval `/app/modules/0/bin/modulecmd sh "$@"` ;}
我已经将前两个命令更改为tcsh
setenv MODULEPATH /app/modules/0/modulefiles:/env/common/modules
set MODULEPATH
但是我不知道如何更改最后一个命令的语法。控制台向我返回错误“放置不正确()。”。
我可以要求一点教训,以便对tcsh友好地更改此命令吗?
答案 0 :(得分:0)
chepner说的很对,说 tcsh根本没有功能,而您必须写一个别名。对于您的个人来说,这并不需要很多努力-行功能:
alias module 'eval `/app/modules/0/bin/modulecmd sh \!*`'
基本上,我们将alias
放在前面,删除()
和{}
,引用并将"$@"
替换为\!*
。
答案 1 :(得分:0)
您要从bash移植到tcsh的module
命令已经带有一个初始化文件到tcsh shell。对于module
兼容的所有Shell或脚本语言,该软件的init
目录中提供了一个初始化文件。
因此,在您的示例中,模块安装在/app/modules/0
中,因此您应该有一个/app/modules/0/init
目录和一个/app/modules/0/init/tcsh
脚本来初始化tcsh的模块命令。您只需要提供源代码即可初始化module
命令:
source /app/modules/0/init/tcsh
正如Armali所说,tcsh上的模块命令是使用alias
shell命令定义的。
在最新版本的Modules(版本4+)中,您还可以使用module
脚本的autoinit
子命令在当前Shell会话中定义modulecmd
命令:
eval `/app/modules/0/bin/modulecmd tcsh autoinit`