0

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

示例:如果用户键入:

xyz load aab\1.0.5

我想拥有xyz load aab\1.0.5一个可以做更多事情的字符串。

我为什么要问?(您可以跳过阅读的内容)

在这种情况下,我会将此字符串的部分内容与目录名称进行比较,或者

  1. 如果没有匹配,给用户一个警告,或者
  2. 以其他方式执行命令。

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

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

编辑2:澄清

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

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

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

4

1 回答 1

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

$chmod a+x 钩子

$ln -s 钩子模块

$PATH=.:$PATH 模块 arg1 arg2

于 2012-10-18T15:33:23.460 回答