2012-04-30 15 views
5

Podczas próby uruchomienia poniższego skryptu oczekującego, po prostu kończy działanie, czekając na wprowadzenie danych przez użytkownika. Czy ktoś mógłby mi powiedzieć, co robię źle?nie oczekuje na dane wejściowe użytkownika w oczekiwaniu na skrypt

#!/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 

Odpowiedz

6

Oczekiwać zmienia komendy Tcl gets tak, że nie czekać do standardowego wejścia; czytać wiersz czekając na niego, trzeba to zamiast gets stdin id zrobić:

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

Uwagi: Znalazłem sposób, aby uzyskać dane od użytkownika w dokumentacji spodziewać i potwierdziłem, że Expect zmienia zachowanie blokujące 'dostaje stdin' przez testowanie. Byłem bardzo zaskoczony tą zmianą. –

0

Spróbuj kod:

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 
Powiązane problemy