将bash命令重构为tcsh命令

问题描述 投票:1回答:2

我有重构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友好吗?

bash tcsh environment-modules
2个回答
0
投票

chepner是对的,说tcsh根本没有功能,你必须写一个别名。这对您的单线功能来说不是很大的努力:

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

基本上,我们前置alias,删除(){},引用并用"$@"替换\!*


0
投票

您想要从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`
© www.soinside.com 2019 - 2024. All rights reserved.