2014-01-15 60 views
3

這與我在stackoverflow上看到的其他一些rsync bash變量問題類似,但沒有一個答案解決了我的特定問題。我想運行一個bash腳本下面的命令,但必須包含在一個變量rsync的選項:rsync命令與bash變量中的--filter

rsync -ahz --delete --filter=': .rsync-filter' source/ destination/ 

我注意到,其實bash的這個解釋如下:

+ rsync -ahz --delete '--filter=: .rsync-filter' source/ destination/ 

其中還在rsync中工作正常。

當我試圖把變量我看到下面的命令正在運行這些值:

RSYNCOPTS="-ahz --delete --filter=: .rsync-filter" 
rsync ${RSYNCOPTS} source/ destination/ 
+ RSYNCOPTS='-ahz --delete --filter=: .rsync-filter' 
+ rsync -ahz --delete --filter=: .rsync-filter source/ destination/ 
unexpected end of filter rule: : 

RSYNCOPTS="-ahz --delete --filter=': .rsync-filter'" 
rsync ${RSYNCOPTS} source/ destination/ 
+ RSYNCOPTS='-ahz --delete --filter='\'': .rsync-filter'\''' 
+ rsync -ahz --delete '--filter='\'':' '.rsync-filter'\''' source/ destination/ 
Unknown filter rule: `':' 

RSYNCOPTS="-ahz --delete '--filter=: .rsync-filter'" 
rsync ${RSYNCOPTS} source/ destination/ 
+ RSYNCOPTS='-ahz --delete '\''--filter=: .rsync-filter'\''' 
+ rsync -ahz --delete ''\''--filter=:' '.rsync-filter'\''' source/ destination/ 
Unexpected local arg: .rsync-filter' 

RSYNCOPTS='-ahz --delete --filter=: .rsync-filter' 
rsync ${RSYNCOPTS} source/ destination/ 
+ RSYNCOPTS='-ahz --delete --filter=: .rsync-filter' 
+ rsync -ahz --delete --filter=: .rsync-filter source/ destination/ 
unexpected end of filter rule: : 

RSYNCOPTS='-ahz --delete --filter=": .rsync-filter"' 
rsync ${RSYNCOPTS} source/ destination/ 
+ RSYNCOPTS='-ahz --delete --filter=": .rsync-filter"' 
+ rsync -ahz --delete '--filter=":' '.rsync-filter"' source/ destination/ 
Unknown filter rule: `":' 

RSYNCOPTS='-ahz --delete "--filter=: .rsync-filter"' 
rsync ${RSYNCOPTS} source/ destination/ 
+ RSYNCOPTS='-ahz --delete "--filter=: .rsync-filter"' 
+ rsync -ahz --delete '"--filter=:' '.rsync-filter"' source/ destination/ 
Unexpected local arg: .rsync-filter" 

而且我甚至嘗試了一些與陣列,看看是否能幫助:

RSYNCOPTS=(-ahz --delete '--filter=: .rsync-filter') 
rsync ${RSYNCOPTS[@]} source/ destination/ 
+ RSYNCOPTS=(-ahz --delete '--filter=: .rsync-filter') 
+ rsync -ahz --delete --filter=: .rsync-filter source/ destination/ 
unexpected end of filter rule: : 

RSYNCOPTS=(-ahz --delete '--filter=": .rsync-filter"') 
rsync ${RSYNCOPTS[@]} source/ destination/ 
+ RSYNCOPTS=(-ahz --delete '--filter=": .rsync-filter"') 
+ rsync -ahz --delete '--filter=":' '.rsync-filter"' source/ destination/ 
Unknown filter rule: `":' 

RSYNCOPTS=(-ahz --delete "--filter=': .rsync-filter'") 
rsync ${RSYNCOPTS[@]} source/ destination/ 
+ RSYNCOPTS=(-ahz --delete "--filter=': .rsync-filter'") 
+ rsync -ahz --delete '--filter='\'':' '.rsync-filter'\''' source/ destination/ 
Unknown filter rule: `':' 

所以我錯過了什麼?

回答

7

使用陣列的方法和雙引號陣列基準:

RSYNCOPTS=(-ahz --delete '--filter=: .rsync-filter') 
rsync "${RSYNCOPTS[@]}" source/ destination/ 
+0

+1。這是[bash faq 50](http://mywiki.wooledge.org/BashFAQ/050) –

+0

就是這樣。我很高興看到我在2個角色中獲得了正確的答案。 :-/ 謝謝! –