Я пытаюсь достичь примерно этого.
Servers = (11, 12, 13)
ssh -t admin@10.1.1.10 << EOF
sudo tar -zcf somefolders.tar.gz ~/somefolders
for i in "${Servers[@]}"
sudo scp somefolders.tar.gz admin@10.1.1.$i:~
EOF
Теперь проблема с for
цикл, потому что он выполняется на удаленном хосте без Servers
параметры, и поскольку это была отдельная команда, как и должно быть. Я знаю, почему он это делает, но не знаю, как это сделать правильно? Как я могу правильно выполнить этот цикл?
Я знаю, что одно решение - написать операцию несколько раз с разными IP-адресами, но мы знаем, что это неэффективный способ написания кода.
Заранее спасибо.
Для этого не обязательно использовать массивы bash, просто используйте список серверов, разделенных пробелами:
В $Server
переменная будет локально интерпретироваться вашей оболочкой, и сценарий, переданный в 10.1.1.10, будет отправлен с "for i in 11 12 13 ;...
"по своему содержанию.
Servers="11 12 13"
ssh -t admin@10.1.1.10 << EOF
sudo tar -zcf somefolders.tar.gz ~/somefolders
for i in $Servers ;do
sudo scp somefolders.tar.gz admin@10.1.1.\$i:~
done
EOF