rsync в оболочке для цикла

У меня есть этот сценарий оболочки

#!/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: команда не найдена

Что сводит меня с ума, так это то, что если я удалю цикл for и просто запущу команду rsync, скрипт будет работать отлично.


person José Luis    schedule 01.11.2012    source источник
comment
Кстати, вы используете массивы (${PATHS[@]}), которые доступны только для bash. Вам лучше указать что-то вроде #!/bin/bash в вашем shebang, иначе он, вероятно, рано или поздно взорвется - большинство дистрибутивов Linux, как правило, удаляют bash как реализацию sh по умолчанию, BSD / Mac никогда не имели bash как sh.   -  person GreyCat    schedule 02.11.2012
comment
Лучшей практикой является использование имен переменных в нижнем регистре (path) для всего, что не является ни переменной среды, ни встроенной; это позволяет избежать ошибочного использования зарезервированных имен (например, PATH).   -  person Charles Duffy    schedule 07.03.2015


Ответы (1)


PATH — зарезервированная переменная!

Это переменная, указывающая, где искать инструменты (например, rsync)

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

Используйте другое имя переменной!

person F. Hauri    schedule 01.11.2012