2016-07-07 3 views
1

Я хочу передать ssh узлу и запустить команду, а затем выйти. Это повторяется для всех кивок. Сценарий довольно простbash script to ssh и команды запуска

#!/bin/bash 
NODES="compute-0-0 compute-0-1 compute-0-2 compute-0-3" 
for i in $NODES 
do 
    ssh $i 
    ls -l /share/apps 
    rpm -ivh /share/apps/file.rpm 
    exit 
done 

Но проблема заключается в том, что после SSH, команда ls -l пропущена. Поэтому командное приглашение ждет ввода!

Любой способ исправить это?

UPDATE:

Я изменил тело цикла, как

ssh $i <<END 
ls -l /share/apps 
exit 
END 

Но я получаю

./lst.sh: line 9: warning: here-document at line 5 delimited by end-of-file (wanted `END') 
./lst.sh: line 10: syntax error: unexpected end of file 
+2

См http://stackoverflow.com/questions/37586811/pass-commands-as-input-to-another-command-su-ssh-sh-etc – Leon

+0

Если вы хотите ваш раздел 'ssh' скрипта будет отступом, используйте' << - END' – Leon

+1

Ответ, который вы приняли, должен работать. Тем не менее, ваш подход «здесь-док» не был неправильным. Я думаю, вы добавили некоторые пробелы перед 'END' после строки' exit'. В качестве альтернативы, если вы wnt те пространства для отступов, измените строку heredoc на 'ssh $ i << - END' (обратите внимание на оператор' << - 'вместо' << ') – anishsane

ответ

1

Попробуйте

#!/bin/bash 
    NODES="compute-0-0 compute-0-1 compute-0-2 compute-0-3" 
    for i in $NODES 
    do 
     ssh $i "ls -l /share/apps;rpm -ivh /share/apps/file.rpm;exit;" 
    done 
0

Я бы изменить сценарий и будет запускать команду ssh с командой на выполнить.

Например:

#!/bin/bash 
NODES="compute-0-0 compute-0-1 compute-0-2 compute-0-3" 
for i in $NODES 
do 
    ssh $i "ls -l /share/apps && rpm -ivh /share/apps/file.rpm && exit" 
done 

Оператор && означает, что каждая команда будет выполняться только тогда, когда предыдущая команда успешно.

Если вы хотите выполнить команду самостоятельно, вы можете вместо этого изменить оператор && на ;.

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