Как выполнить ssh из сценария оболочки и выполнить цикл for с использованием глобальных параметров?

Я пытаюсь выполнить что-то вроде этого.

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-адресами, но мы знаем, что это неэффективный способ написания кода.

Заранее спасибо.

0
задан 26 April 2017 в 18:21
1 ответ

Для этого необязательно использовать массивы 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
1
ответ дан 4 December 2019 в 16:16

Теги

Похожие вопросы