2016-03-14 47 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當然!緩慢的下午...... :-( –

相關問題