我有重构bash命令到tcsh友好命令的问题。不知道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
但我不知道如何更改最后一个命令的语法。控制台返回错误“Badly placed()”。
我可以问一下这个命令要改变什么才能对tcsh友好吗?
chepner是对的,说tcsh根本没有功能,你必须写一个别名。这对您的单线功能来说不是很大的努力:
alias module 'eval `/app/modules/0/bin/modulecmd sh \!*`'
基本上,我们前置alias
,删除()
和{}
,引用并用"$@"
替换\!*
。
您想要从bash移植到tcsh的module
命令已经附带了一个初始化文件到tcsh shell。对于module
兼容的所有shell或脚本语言,在软件的init
目录中提供了初始化文件。
因此,从您的示例中,Modules安装在/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`