2015-05-07 60 views
2

我有一個腳本,它用一些動態生成的參數調用rsync命令,但我無法正確傳遞它們。將動態生成的參數傳遞給腳本內的命令

下面是一些摘錄:

logfile="$logDir/$(timestamp) $name.log" 
echo "something" >> "$logfile" 

params="-aAXz --stats -h --delete --exclude-from $exclude --log-file=$logfile $src $dest" 
if [ "$silent" = "" ]; then 
    params="-v $params --info=progress2" 
fi 
rsync $params 

如果日誌文件是如/tmp/150507 test.logsomething語句實際上是寫入/tmp/150507 test.log,但rsync將其日誌寫入/tmp/150507(刪除第一個空白後的所有內容)。

如果我明確地引用在PARAMS日誌文件的名稱,rsync的拋出一個異常:

params="-aAXz --stats -h --delete --exclude-from $exclude --log-file=\"$logfile\" $src $dest" 

錯誤:

rsync: failed to open log-file "/tmp/150507: No such file or directory (2)
Ignoring "log file" setting.

如何動態生成PARAMS不失能力在文件名中使用空格?

回答

1

更多報價需要各地日誌文件名:

declare -a params 

params=(-aAXz --stats -h --delete --exclude-from "$exclude" --log-file="$logfile" "$src" "$dest") 

if [ "$silent" = "" ]; then 
    params+=(-v "$params" --info=progress2) 
fi 

rsync "${params[@]}" 

這是你應該考慮使用BASH陣列構成一個動態的命令行的情況。

+0

這不正是我在我的文章的後半部分提到的(以「如果我明確引用...」開頭)導致rsync錯誤嗎? – suamikim

+0

檢查我編輯的答案。 – anubhava

相關問題