Написал скрипт оболочки bash, который использует rsync для развертывания файлов на работающем веб-сервере.

Непосредственно перед выполнением скрипт выводит полную команду, которую генерирует скрипт my shell:

rsync --chmod="ug=rwx" -e="ssh" --filter="merge .deploy/filters" --dry-run --recursive -v --size-only "/var/www/vhosts/staging/mysite.com/httpdocs/" "me@mysite.com:/var/www/vhosts/mysite.com/domains/mysite.com/httpdocs"

Это выполняется внутри моего сценария оболочки так:

local command=`getDeploymentCommand "$deploy_direction" "$mode"`
echo $command
echo `$command`

... и выдает следующую ошибку:

rsync: Invalid argument passed to --chmod ("ug=rwx")

Синтаксис chmod выглядит правильно для меня. Что действительно странно, так это то, что настоящая команда, вставленная в оболочку и выполненная, работает нормально. Почему это так и как я могу заставить это работать?

1 ответ1

1

Глядя на справочную страницу, кавычки не требуются и, вероятно, делают что-то непреднамеренное в сценарии оболочки, а не вставляются прямо в командную строку. Попробуйте удалить эти цитаты из вашей команды.

Проблема в том, что оболочка допускает интерполяцию переменных внутри двойных кавычек. Если вы используете одинарные кавычки, это не разрешает интерполяцию, или вы можете экранировать сами кавычки, чтобы избежать интерполяции.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .