2016-03-14 48 views
0

关于rsync调用的问题并不缺少,但我没有看到任何有助于我读过的十几个有用的东西,所以这是命令I 'm挣扎着:来自groovy的rsync:“-e”arg导致“未知的远程参数”错误

$ rsync -av -e 'ssh -i key.id_dsa -l root' [email protected]:/dir/file /tmp/file 

它从bash工作。我使用String.execute()方法调用它从Groovy代码和它如下失败:

command exit code: 1 
rsync command output: 

rsync command error output: 
Unexpected remote arg: [email protected]:/dir/file 
rsync error: syntax or usage error (code 1) at main.c(1348) [sender=3.1.0] 

显然,-e开关和它的值的问题是:命令如rsync -av -r --progress [email protected]:/dir/file /tmp/file作品完美无缺。

问题0:为什么-e参数特殊?

问题1:我如何使它工作?

+1

可以尝试:'[“庆典”,“-c” ,“rsync -av -e'ssh -i key.id_dsa -l root'root @ server:/ dir/file/tmp/file”]。execute()'? –

+0

@tim_yates您可以请您的评论一个答案,以便我可以upvote它并接受它? ( - ;谢谢,这是一个非常好的礼物,你在一个非常困难的日子给了我 –

+0

顺便说一句,任何想法为什么'-e'开关看起来很特殊?使用引号指定参数吗? –

回答

1

我猜-e交换机是bash shell的要求......所以调用与它背后的的bash shell命令花哨的东西,你需要使用List形式的execute像这样:

["bash", "-c", "rsync -av -e 'ssh -i key.id_dsa -l root' [email protected]:/dir/file /tmp/file"].execute() 

而且应该得到它运行(我总是使用这种形式,因为它似乎总是不那么容易出错比String.execute()形式)

+1

这个问题并不是因为'-e',而是之后的引用。引号由bash和'Runtime解释。 exec'只是在空格之间拆分参数并忽略引号。 –

+0

@JérémieB当然!缓慢的下午...... :-( –

相关问题