2008-11-14 25 views
3

我有一个脚本需要一个命令并在远程主机上执行它。它工作正常,例如:如何在bash中自动引用或分组别名的命令行参数?

$ rexec "ant build_all" 

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

因为我懒,我想成立这个命令的别名(最终,其他几个人),这样,例如,我可以调用

$ rant build_all 

和bash会把它会自动调用

$ rexec "ant build_all" 

我试着用别名这样做,但如果我定义

alias rant=rexec ant 

那么任何中传递给“咆哮”将只被追加到结尾,就像这样:

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

这将会失败,因为REXEC真的只需要一个参数,而忽略其他。我可能会用bash包装脚本来做到这一点,但我想知道bash是否有为我这样做的内置插件,或许是别名的命名参数版本,或者类似perl的引号字符串命令(例如qw //)或者其他的。

+0

其实,我离开了一些重要信息的程序:REXEC实际上是另一个命令的别名,像这样: 别名rexce =“run_remote.sh -c” 但它仍然需要一个字符串作为参数。这对于我接受的解决方案很重要,下面是我的修改。 – glamdringlfo 2008-11-14 14:31:36

回答

3

对于所有参数的命令行调用它,这会工作。

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

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

+0

我用过这个,但有一个重要的概括。谢谢! – glamdringlfo 2008-11-14 14:33:09

0

你可以做到这一点作为一个功能,而不是一个别名:

function rant { rexec "ant $1"; } 

你可以像一个别名

2

我结束了使用肯G公司的答案,但一个更好的:定义雷克斯作为函数,像这样:

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

让我再别名使用REXEC,像这样:

alias rant="rex ant" 

,并且仍然按照我需要的方式将这些论点包裹起来。

我忘了我可以在bash中使用这样的函数。这正是我所需要的,而不必创建一个包装脚本。

伟大的提示,谢谢!

编辑:改变“REXEC”为“霸王龙”,因为我发现我的系统中已经有一个名为“REXEC”