Назад | Перейти на главную страницу

подстановка команд rsync и bash

Пытаемся заставить скрипт правильно использовать переменные. (Приведенные ниже примеры находятся в командной строке, но я вижу точно такое же поведение, когда внутри #!/bin/bash сценарий.

$ FLAGS='--rsh="ssh -2"'
$ rsync $FLAGS foo bar
rsync: -2": unknown option
rsync error: syntax or usage error (code 1) at main.c(1084)

Итак, я добавляю цитаты.

$ rsync "$FLAGS" foo bar

И теперь все работает нормально. Ладно. Теперь добавим еще несколько флагов в $FLAGS переменная. (Я пробовал использовать только «-r» и просто «-p», происходит то же самое, поэтому я не думаю, что это связано с конкретными флагами с одним дефисом, которые я передаю.)

$ FLAGS='-rptvlCR --rsh="ssh -2"'
$ rsync $FLAGS foo bar
rsync: -2": unknown option
rsync error: syntax or usage error (code 1) at main.c(1084)
$ rsync "$FLAGS" foo bar
rsync: -rptvlCR --rsh="ssh -2": unknown option
rsync error: syntax or usage error (code 1) at main.c(1084)
$ 

Обратите внимание, что во втором случае весь аргумент рассматривается как одна опция для rsync.

Базовая команда (набирается вручную без использования $FLAGS переменная) работает правильно.

Любые идеи?

Любые идеи? Я прочитал все документы по сценариям bash, которые смог найти, и не могу понять, почему rsync иногда игнорирует двойные кавычки и обрабатывает -2" как единый токен.

Закидываем их в массив:

FLAGS=( '-rptvlCR' '--rsh="ssh -2"' )
rsync "${FLAGS[@]}"

Видеть этот FAQ по Bash для более подробной информации