符号链接捕获用户输入

时间:2012-10-18 14:30:01

标签: bash symlink

我想创建一个名为xyz的符号链接,然后捕获用户提供的输入,包括符号链接名称。

示例:如果用户键入:

xyz load aab\1.0.5

我希望将xyz load aab\1.0.5作为一个字符串,我可以做更多的事情。

我为什么这么问? (你可以跳过阅读的东西)

在这种情况下,我将比较此字符串的部分与目录的名称和

  1. 如果没有匹配,则向用户发出警告,或
  2. 按原样执行命令。
  3. 我想要做的是劫持module命令。

    编辑:我想我应该使用别名。

    Edit2:澄清

    我想要做的确切事实是:当用户输入module load programmodule load program/2.3.3时。在我知道他们请求的版本是否可用于特定平台之前,我不希望该命令执行。我可以通过查看文件夹/app/firefox/.sys/@sys/来查看可用的版本。

    潜在的“问题”是module的设置方式使所有模块可用于SLES 10和11以及32位和64位,因此在某些情况下用户会尝试加载一个不可用的版本他们的平台。

    我现在意识到一个问题:如果他们没有输入版本,那么它会选择默认版本。但我不知道如何使用脚本轻松找到默认版本。 grepping module appname avail以获取其中包含“(default)”的版本不起作用,因为它是打印结果的其他模块。例如module firefox avail >> result.text给出一个空文件。

1 个答案:

答案 0 :(得分:0)

我不确定问题是否正确,但您可能正试图“勾住”某个特定命令。在这种情况下,你可以使用一个钩子脚本,并使用与你想要挂钩的命令相同的名称链接到它,它们出现在实际的$ PATH之前,所以你可以决定是否调用真实的命令。

例如:

(警告:这是另一个危险且难看的黑客

$ cat hook

#!/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 "$@"
    rc=$?
    exit $rc
else
    echo "???" 1>&2
    exit 1
fi

$ chmod a + x hook

$ ln -s hook module

$ PATH =。:$ PATH模块arg1 arg2