2012-06-23 6 views
1

Я пытаюсь написать сценарий, где у меня есть цикл для входа на несколько удаленных компьютеров и выполнения сценария внутри каждой машины. Вот пример:выполнение сценария с использованием ssh внутри цикла

for ((j=1; j < 2; j++)); do 

    mchname="n"$j 

    ssh -T $mchname <<'ENDSSH'  
    ./run_script <input> output &  
    ENDSSH 

done 

Всякий раз, когда я пытаюсь выполнить вышеуказанный сценарий, я получаю: «предупреждение: здесь-документ в строке 37 разграничены отслуживших файла (хотел` ENDSSH ')»

Я новичок в ssh, поэтому я уверен, что делаю глупую ошибку. Может ли кто-нибудь предложить мне решение? Спасибо.

ответ

10

В вашем скрипте bash есть проблема. Тег конца heredoc (ENDSSH в вашем скрипте) не может быть отступом.

Попробуйте вместо этого:

ssh -T $mchname <<'ENDSSH'  
    ./run_script <input> output &  
ENDSSH 
#^no indentation for that line 

Edit:

Кроме того, вы можете запустить команду на удаленной системе, передавая ее в качестве аргумента в SSH, а не предоставление его в качестве стандартного ввода , Команда будет выполнена удаленной оболочкой пользователя:

ssh -T $mchname './run_script <input> output &' 
+0

И '-T' по умолчанию, когда вы даете' ssh' явной команде для запуска, так что 'SSH $ mchname«./run_script < input > выхода &» '. – dave4420

+0

Спасибо большое! Я бы никогда не поймал этого! – user1477337

+1

Если вы используете «<< -» вместо «<<» для данного документа, любые ведущие вкладки (только вкладки, а не произвольные пробелы) из документа здесь и конечный тег будут удалены, что позволит вам отступы их более естественно , – chepner

Смежные вопросы