Я пытаюсь выполнить что-то вроде этого.
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