2014-11-18 13 views
5

Hey bin Skripte bash und frage mich, wie würde ich den Ausgang des ssh Befehl in einer Bash-Variable erfassen? Ich schaute mich um und konnte es anscheinend nicht richtig machen. Ich habe versucht, setzt $expect_out(buffer) aber wenn echo sagt es Variable nicht existiertCapture erwarten ssh Ausgang variable

Ich weiß, dass die Antwort eine Zeile nur sein sollte, und wenn ich das in eine Variable response speichern möchten, und dann echo es, wie sollte ich das tun?

+0

den Code Fügen Sie jetzt haben, und den genauen Ausgang verwendet werden Du bekommst momentan. –

Antwort

4

Eine generische Idee kann so etwas wie, wie unten sein.

  1. spawn die SSH-Sitzung
  2. korrekte Anmeldung
  3. senden Befehle jeweils mit send
  4. Warten gewünschte Ausgabe mit expect

Beispiel machen:

spawn ssh [email protected]$domain 
expect "password" { send "$pwd\r"} 
expect "#"; # This '#' is nothing but the terminal prompt 
send "$cmd\r" 
expect "#" 
puts $expect_out(buffer); #Will print the output of the 'cmd' output now. 

Das Wort zu warten, nach der Ausführung des Befehls kann auf Ihrem System variiert. Es kann # oder $ oder > oder : sein; Also, stellen Sie sicher, dass Sie die richtige geben. Oder Sie ein allgemeines Muster für die prompten als solche

set prompt "#|>|:|\\\$"; # We escaped the `$` symbol with backslash to match literal '$' 

liefern können, während der expect verwenden, nachdem die Befehle zu senden, kann es als

expect -re $prompt; #Using regex to match the pattern`