Я хочу скопировать содержимое "src/main/resources/"
на мои удаленные серверы. Эта папка содержит несколько *properties
файлов.
Следующая команда выполняется без проблем в bash и zsh:
rsync -av "src/main/resources/*" "azureuser@s1.cloudapp.net:/home/azureuser"
Однако при выполнении такой команды внутри сценария оболочки я получаю следующую ошибку. Я думаю, что это связано с расширением *
в оболочке.
rsync: link_stat "/home/marcos/Desenvolvimento/Java/EXT-Hyuga/src/main/resources/*" failed: No such file or directory (2)
Как можно решить эту проблему?
Содержимое сценария оболочки:
#!/bin/bash
# server array
declare -a deployinstances=("s1" "s2" "s3" "s4")
## looping trough deploy instances
for di in "${deployinstances[@]}"
do
rsync -av "src/main/resources/*" "azureuser@$di.cloudapp.net:/home/azureuser"
done
Ваша первая команда, та, которую Вы выполнили непосредственно в командной строке, не работала бы также.
В bash
(и все другие оболочки), поколение имени файла (иначе расширение пути или расширение шарика) не произойдет, когда маркеры (например, *
, ?
, []
) будут помещены в кавычках (дважды и единственный), поскольку удаление кавычки сделано оболочкой после расширения пути для любого слова, таким образом, слово рассматривают буквально затем.
, Таким образом, необходимо сохранить *
за пределами кавычек:
rsync -av src/main/resources/* azureuser@"$di".cloudapp.net:/home/azureuser/
я не использовал кавычек здесь ни в каком пути, потому что, если у Вас нет пробелов в пути, Вам не нужны кавычки вокруг пути.