[英]Refactoring bash command into tcsh command
我在將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友好地更改此命令嗎?
chepner說的對, tcsh根本沒有功能, 您必須寫一個別名。 對於單行函數來說,這並不是什么大的工作:
alias module 'eval `/app/modules/0/bin/modulecmd sh \!*`'
基本上,我們在alias
,刪除()
和{}
,引用並用\\!*
替換"$@"
。
您想要從bash移植到tcsh的module
命令已經帶有一個初始化文件到tcsh shell。 對於所有與Shell或腳本語言兼容的module
,該軟件的init
目錄中提供了一個初始化文件。
因此,根據您的示例,模塊安裝在/app/modules/0
,因此您應該具有/app/modules/0/init
目錄和/app/modules/0/init/tcsh
腳本來初始化/app/modules/0/init/tcsh
的module命令。 您只需要提供源代碼即可初始化module
命令:
source /app/modules/0/init/tcsh
正如Armali所說,tcsh上的模塊命令是使用alias
shell命令定義的。
使用最新版本的Modules(版本4+),您還可以使用modulecmd
腳本的autoinit
子命令在當前Shell會話中定義module
命令:
eval `/app/modules/0/bin/modulecmd tcsh autoinit`
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.