如何在bash中为别名自动引用或分组命令行参数?

时间:2008-11-14 14:11:34

标签: bash alias

我有一个脚本,它接受一个命令并在远程主机上执行它。它工作正常,例如:

$ rexec "ant build_all"

将在远程系统上执行“ant build_all”命令(通过SSH传递它等)。

因为我很懒,我想为这个命令设置别名(最终还有其他几个),例如,我可以调用

$ rant build_all

和bash会自动调用

$ rexec "ant build_all"

我尝试用别名做这个,但是如果我定义

alias rant=rexec ant

然后传递给“rant”的任何参数都将附加到结尾,如下所示:

$ rant build_all -Dtarget=Win32
(interpreted as:)
$ rexec "ant" build_all -Dtarget=Win32

这失败了,因为rexec只需要一个参数,而忽略其他参数。

我可以使用bash包装器脚本执行此操作,但我想知道bash是否有任何内置插件可以为我执行此操作,可能是别名的命名参数版本,或类似perl的引用字符串命令(例如qw / /),或其他一些。

3 个答案:

答案 0 :(得分:3)

对于所有参数,这都可行。

function rant () {
    rexec "ant $*"
}

您可能需要调整引用,具体取决于您传递的参数。

答案 1 :(得分:2)

我最终使用了Ken G的答案,但更好的是:将rex定义为函数,如下所示:

function rex {
    run_remote.sh -c "$*"
}

允许我在别名中使用rexec,如下所示:

alias rant="rex ant"

并且仍然按照我需要的方式包装参数。

我忘了我可以在bash中使用这样的功能。这完全符合我的需要,无需创建包装脚本。

非常好,谢谢!

编辑:将“rexec”更改为“rex”,因为我发现我的系统已经有一个名为“rexec”的程序

答案 2 :(得分:0)

您可以将其作为一项功能,而不是别名:

function rant { rexec "ant $1"; }

您可以在命令行中调用它,如别名