I have this shell script
#!/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
And I always get this error:
rsync: command not found
What is driving me crazy is that if I delete the for loop, and just run the rsync command, the script works perfectly
PATH
is a reserved variable!
It is the variable specifying where to search tools (like rsync
)
$ set | grep ^PATH=
PATH=/home/user/bin:/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games
Use another variable name!
Avoid upper case in script variable names:
allPaths=( a b c d )
for onePath in "${allPaths[@]}"; do
rsync -avziP "/home/user/$PATH" "$SERVER:$server_folder" -b \
--backup-dir="$backup_folder/backup_$date" --delete --exclude=".*" \
--log-file="$HOME/rsync.log"
done
And keep habit of enclosing your variable in double quotes when used as argument!