3

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

$ 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/ / ),或类似的。

4

3 回答 3

3

对于所有论点,这将起作用。

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

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

于 2008-11-14T14:21:45.777 回答
2

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

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

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

alias rant="rex ant"

并且仍然让它按照我需要的方式包装论点。

我忘了我可以在 bash 中使用类似的函数。这正是我需要的,无需创建包装脚本。

很好的提示,谢谢!

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

于 2008-11-14T14:32:43.633 回答
0

您可以将其作为函数而不是别名来执行:

function rant { rexec "ant $1"; }

您可以像别名一样在命令行调用它

于 2008-11-14T14:21:32.907 回答