2012-10-18 47 views
0

我想創建一個名稱爲xyz的符號鏈接,然後捕獲用戶給出的輸入,包括符號鏈接名稱。符號鏈接捕獲用戶輸入

示例:如果用戶類型:

xyz load aab\1.0.5 

我想有xyz load aab\1.0.5作爲一個字符串,我可以做更多的東西。

爲什麼要問? (事情,你可以跳過讀)

在這種情況下,我會比較這部分字符串與目錄的名稱,要麼

  1. 給用戶一個警告,如果不匹配,或
  2. 執行該命令就像其他情況一樣。

我想要做的就是劫持module命令。

編輯:我想我應該使用別名。

EDIT2:澄清

我想要做的確切的事情是這樣的:當用戶鍵入module load programmodule load program/2.3.3。我不希望命令執行之前,我知道他們正在請求的版本是否可用於特定的平臺。我可以通過查看文件夾/app/firefox/.sys/@sys/來查看可用的版本。

底層的「問題」是module的設置方式使所有模塊都可用於SLES 10和11以及32位和64位,因此在某些情況下用戶嘗試加載在其平臺上不可用的版本。

我現在已經意識到一個問題:如果他們不鍵入版本,那麼它會選擇默認版本。但我不知道如何使用腳本輕鬆找出默認版本。 grep module appname avail以獲取具有「(默認)」的版本不起作用,因爲它是別的東西,然後是打印結果的模塊。例如module firefox avail >> result.text給出一個空文件。

+1

什麼問題?你想要鏈接指向什麼?請更具體地說。 – choroba

回答

0

不知道我是否正確的問題,但可能是你試圖'鉤'一個特定的命令。在這種情況下,你可以使用鉤子腳本來完成它,並使用與你想要鉤住的命令相同的名稱進行鏈接,這些命令出現在真正的$ PATH之前,所以你可以決定是否調用真實命令。

例如:

(警告:這是另一個危險和醜陋的黑客

$貓鉤

#!/bin/bash 
# hook for some commands 

echo $0 

cmd=$(basename "$0") 
echo "called as $cmd" 

if [[ $cmd = "module" ]] 
then 
    realcmd=/usr/bin/module 

    # verify parameters 

    # then call real command 
    $realcmd "[email protected]" 
    rc=$? 
    exit $rc 
else 
    echo "???" 1>&2 
    exit 1 
fi 

$ CHMOD一個+ X鉤

$ LN -s鉤子模塊

$ PAT H =。:$ PATH模塊arg1 arg2

+0

謝謝,這幫助我進入下一步。由於低信譽而沒有投票。 – Fredrik

+1

非常歡迎。您也可以將答案標記爲已接受的答案,如果已這樣決定(http://stackoverflow.com/faq#howtoask) –