![当我需要在同一个命令中调用多个二进制文件时,如何使别名起作用?](https://linux22.com/image/1365809/%E5%BD%93%E6%88%91%E9%9C%80%E8%A6%81%E5%9C%A8%E5%90%8C%E4%B8%80%E4%B8%AA%E5%91%BD%E4%BB%A4%E4%B8%AD%E8%B0%83%E7%94%A8%E5%A4%9A%E4%B8%AA%E4%BA%8C%E8%BF%9B%E5%88%B6%E6%96%87%E4%BB%B6%E6%97%B6%EF%BC%8C%E5%A6%82%E4%BD%95%E4%BD%BF%E5%88%AB%E5%90%8D%E8%B5%B7%E4%BD%9C%E7%94%A8%EF%BC%9F.png)
假设我有两个二进制文件:二进制1和二进制2。
它们每个都有自己的选项集:选项1和选项2。
用户需要调用遵循以下结构的命令:
binary1 options1 binary2 options2
但是我想设置选项2并让它们运行以下命令:
binary1 options1 alias
在哪里
alias='binary2 options2'
有什么方法可以在 bash/tcsh 下实现此功能吗?我在 64 位架构的 SLES 11 SP2 下工作。
答案1
您需要让 binary1 和 options1 成为它们想要启动的任意值吗?然后:定义函数“something”:
something () {
options2="...." #you define them as you want, either here or from another source
binary1="$1" ; shift
"$binary1" "$@"
binary2 $options2
}
(并在 bash 登录文件中定义它)
并让它们运行:
something binary1 options1
这样他们就可以真正疯狂地选择选项1,例如:
something touch file1 file2 "file3 with extra spaces" file4
答案2
mpirun 不喜欢运行别名,您可能已经猜到了。最好的办法是围绕可执行文件创建一个包装器。因此,将以下内容放在文件中(使其可执行):
#!/usr/intel/bin/tcsh -f
exec /full/path/to/dplace -s1 -c 0-$TOP_PROC $*
如果您将此文件命名为“dplace”并将其放在用户路径中的目录中,该目录在找到真实 dplace 的目录之前进行搜索,那么它将透明地运行包装器脚本(请记住在尝试时“rehash”)。
我假设TOP_PROC 已经在环境中定义。