我想创建一个名为xyz
的符号链接,然后捕获用户提供的输入,包括符号链接名称。
示例:如果用户键入:
xyz load aab\1.0.5
我希望将xyz load aab\1.0.5
作为一个字符串,我可以做更多的事情。
我为什么这么问? (你可以跳过阅读的东西)
在这种情况下,我将比较此字符串的部分与目录的名称和
我想要做的是劫持module
命令。
编辑:我想我应该使用别名。
Edit2:澄清
我想要做的确切事实是:当用户输入module load program
或module 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
给出一个空文件。
答案 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