2012-04-30 11 views
5

Wenn ich versuche, das folgende expect-Skript auszuführen, wird es nur noch ausgeführt und wartet auf Benutzereingaben. Könnte mir jemand sagen, was ich falsch mache?wartet nicht auf Benutzereingaben im Skript expect

#!/usr/bin/expect 
puts -nonewline stdout "Enter device id:" 
flush stdout 
gets stdin id 
puts -nonewline stdout "Enter device name:" 
flush stdout 
gets stdin name 

Antwort

6

Erwarten Sie ändert den Befehl Tcl gets, so dass es für die Standardeingabe wartet nicht; eine Zeile zu lesen, während darauf gewartet, können Sie dies tun müssen, statt gets stdin id:

# Read input to stdin 
expect_user -re "(.*)\n" 
set id $expect_out(1,string) 
+1

Hinweise: Ich fand, wie Eingang in der erwarten Dokumentation vom Benutzer zu erhalten und ich habe bestätigt, dass Expect das Testverhalten von 'gets stdin' ändert. Ich war sehr überrascht von dieser Veränderung. –

0

diesen Code Versuchen:

expect "\\$" 
puts -nonewline "please enter a swithch user: " 
flush stdout 
set userName [gets stdin] 
puts $userName 
expect "\\$" ;# without this line, the script would exit too fast 
      ;# for the "echo hello" to be sent to stdout by bash 
      ;# and thus wont be recorded