2017-07-07 7 views
-1

Ich verwende expect und bereits eine ssh connection etabliert.Ausgangsvariablen von "expect"

Ich möchte das Ergebnis von ls -1 /etc/folder/ sehen.

Ich versuchte

send "files=$(ls -1 /etc/folder/)" 
put $files 

scheiterte aber.

Wie könnte ich das tun?

Antwort

1

Das große Problem, das Sie haben, ist, dass Variablen lokal und Variablen auf dem Remote-System sind und sie sind überhaupt nicht die gleiche Sache. Ja, es ist zwar möglich, Systeme zu erstellen, die Variablen (scheinbar) automatisch zwischen Systemen freigeben, dies geschieht jedoch nicht standardmäßig. Dies ist eine konzeptionelle Sache, die Sie müssen richtig bekommen oder Sie werden nie den richtigen Code außer durch Zufall schreiben.

Abgesehen davon haben Sie ein geringeres Problem, dass Sie den Befehl nicht korrekt senden und das zurückkommende Ergebnis nicht behandeln. Angenommen, Sie wissen, dass die Eingabeaufforderung auf dem Remote-System nur eine $ ist und dass die Dateien nicht damit beginnen, müssen Sie dies tun.

# Note the \r; it is like pressing <Return> and is important! 
send "ls -1 /etc/folder \r" 
# Now we collect the output: 
set files {} 
expect { 
    "$ " { 
     puts $files 
    } 
    -re {^[^$].*$} { 
     # This grabs a line that doesn't start with $ and adds it to the list 
     lappend files $expect_out(0,string) 
     # Now we go back to waiting for another line or the prompt 
     exp_continue 
    } 
} 

Und das ist genau wie Sie es tun. Ja, es dauert ziemlich viel Code ...

+0

Sie können feststellen, dass Sie Wagenrücklauf am Ende jedes Elements der Dateiliste haben. Du kannst wollen '-re {^ ([^ $]. *) \ R? $} {Lappend Dateien $ expect_out (1, string); exp_continue} ' –