将bash命令重构为tcsh命令

时间:2019-04-04 12:59:59

标签: bash tcsh environment-modules

我在将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友好地更改此命令吗?

2 个答案:

答案 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`