2016-07-07 9 views
1

Ich möchte SSH zu einem Knoten und führen Sie einen Befehl dort und dann beenden. Dies wird für alle Nicken wiederholt. Das Skript ist ziemlich einfachBash-Skript zu SSH und Ausführen von Befehlen

#!/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 

Aber das Problem ist, dass nach dem ssh, der ls -l Befehl verpaßt wird. Daher wartet die Eingabeaufforderung auf eine Eingabe!

Jeder Weg, das zu beheben?

UPDATE:

ich den Schleifenkörper als

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

Aber ich bekomme

./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

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

+0

Wenn Sie möchten, Dein 'ssh'-Abschnitt des Skripts, der eingerückt werden soll, benutze' << - END' – Leon

+1

Die Antwort, die du angenommen hast, sollte funktionieren. Allerdings war auch Ihr Here-Doc-Ansatz nicht falsch. Ich denke, Sie haben einige Leerzeichen vor 'END' nach der 'exit'-Zeile hinzugefügt. Wenn Sie diese Leerzeichen für den Einzug ändern möchten, ändern Sie alternativ die heredoc-Zeile zu 'ssh $ i << - END '(Beachten Sie den' << - 'Operator anstelle von' << ') – anishsane

Antwort

1

Versuchen Sie, diese

#!/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

ich das Drehbuch ändern würde und würde den ssh Befehl mit dem der Befehl ausgeführt ausführen.

Zum Beispiel:

#!/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 

Der && Operator bedeutet, dass jeder Befehl nur dann ausgeführt werden, wenn der vorherige Befehl erfolgreich war. Wenn Sie den Befehl unabhängig ausführen möchten, können Sie stattdessen den Operator && in ; ändern.

Verwandte Themen