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

$ rexec "ant build_all"

将执行<!>“; ant build_all <!>”;远程系统上的命令(通过SSH等传递)。

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

$ rant build_all

和bash会自动调用

alias rant=rexec ant

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

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

然后传递给<!>的任何参数“rant <!>”;将被添加到最后,如下:

<*>

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

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

有帮助吗?

解决方案

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

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

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

其他提示

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

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

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

alias rant="rex ant"

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

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

非常好,谢谢!

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

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

function rant { rexec "ant $1"; }

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top