1

我在将 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

但我不知道如何更改最后一个命令的语法。控制台返回错误“放置错误的 ()。”。

我可以问一点小教训,在这个命令中改变什么以使 tcsh 友好?

4

2 回答 2

1

chepner 说tcsh 根本没有功能是对的你必须写一个别名。对于您的单行功能来说,这并不是什么大问题:

alias module 'eval `/app/modules/0/bin/modulecmd sh \!*`'

基本上,我们在前面加上alias、删除(){}、引用和"$@"替换\!*

于 2019-04-05T11:46:42.247 回答
0

module您想要从 bash 移植到 tcsh的命令已经附带了一个到 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 上的模块命令是用aliasshell 命令定义的。

使用最新版本的 Modules(版本 4+),您还可以使用脚本的子module命令在当前 shell 会话中定义命令:autoinitmodulecmd

eval `/app/modules/0/bin/modulecmd tcsh autoinit`
于 2019-04-07T07:31:56.493 回答