2012-11-01 38 views
2

我有這樣的shell腳本rsync的殼for循環

#!/bin/sh 
PATHS=(a b c d) 

for PATH in ${PATHS[@]} 
do 
    rsync -avziP /home/user/$PATH $SERVER:$server_folder -b --backup-dir=$backup_folder/backup_$date --delete --exclude=.* --log-file=$HOME/rsync.log 
done 

,我總是得到這樣的錯誤:

rsync: command not found

什麼讓我發瘋的是,如果我刪除的循環,只是運行rsync命令,腳本工作正常

+3

順便說一句,你使用的是數組('$ {PATHS [@]}'),這是僅bash特性。你最好在你的版本中指定'#!/ bin/bash',否則它可能遲早會失敗 - 大多數Linux發行版傾向於刪除bash作爲默認的sh實現,BSD/Mac從來沒有bash作爲sh 。 – GreyCat

+2

最佳做法是對任何不是環境變量或內置變量的任何內容使用小寫變量名稱('path');這避免了錯誤地跺腳保留名字(比如'PATH')。 –

回答

4

PATH是一個保留變量!

它是變量指定在何處搜索工具(如rsync

$ set | grep ^PATH= 
PATH=/home/user/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games 

使用另一個變量名!