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
modifiziertessh $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
Siehe http://stackoverflow.com/questions/37586811/pass-commands-as-input-to-another-command-su-ssh-sh-etc – Leon
Wenn Sie möchten, Dein 'ssh'-Abschnitt des Skripts, der eingerückt werden soll, benutze' << - END' – Leon
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