簡體   English   中英

將bash命令重構為tcsh命令

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM