Пытаемся заставить скрипт правильно использовать переменные. (Приведенные ниже примеры находятся в командной строке, но я вижу точно такое же поведение, когда внутри #!/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 для более подробной информации