2012-10-18 50 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) –