2017-09-12 1 views
0

Ich versuche, ssh in einen Server, einen Befehl ausführen und speichern Sie die Ausgabe in eine Variable, ohne Erfolg.Erwarten: SSH in einen Remote-Host, führen Sie einen Befehl, und speichern Sie die Ausgabe in eine Variable

spawn $env(SHELL) 
expect "\$ " 
send "ls\r" 
expect "\$ " 
send "ssh myserver1\r" 
expect "\$ " 
send "cd /tmp/remotedir1\r" 
expect "\$ " 
send "ls\r" 
expect "\$ " 
set myvar1 [exec ls] 
puts "The value of \$myvar1 is: " 
puts $myvar1 
send "exit\r" 
expect "\$ " 
send "exit\r" 
expect eof 

Wenn ich es laufen, erhalte ich:

spawn /bin/bash 
$ ls 
localfile1  localfile2  localfile3 
$ ssh myserver1 
Last login: Tue Sep 10 15:45:07 2017 from 192.168.0.100 
myserver1$ cd /tmp/remotedir1 
myserver1$ ls 
remotefile1 
myserver1$ The value of $myvar1 is: 
localfile1 
localfile2 
localfile3 
exit 
logout 
Connection to myserver1 closed. 
bash-3.2$ exit 
exit 

Offenbar statt MyVar1 $ auf "remotefile1", es auf diese drei Dateien in dem $ cwd auf dem lokalen Host setzt.

Vielen Dank für Ihre Hilfe im Voraus!

Antwort

1

Mit exec wird der Befehl lokal ausgeführt.

Nachdem Sie den Befehl ls gesendet haben, müssen Sie das Array expect_out verwenden, um die Antwort zu erhalten.

set prompt "(.*)(#|%|>|\\\$) $" 
send "ls\r" 
expect -re $prompt 
puts $expect_out(1,string) 
+0

Danke. Obwohl Ihr Beispielcode mir nicht genau das gibt, was ich wollte, kam ich auf die Idee, das Schlüsselwort $ expect_out zu verwenden, um die Ausgabe des vorherigen Send-Befehls zu übernehmen. – Young

Verwandte Themen