expect-timeout wird nicht ausgeführt

Herakles

Profifragensteller
Moin!

Ich möchte einen Timeout mit expect abfangen. Folgender Code sollte dies bewerkstelligen:

Code:
#!/usr/bin/expect -f
exp_send "xxxxxxxxxxxxxx\n"
expect -timeout 1 "toll" {
	timeout { exp_send "+++++++++++\n"
		exit 4 }
}

Weil nun keine Einfgabe kommt - sprich die Bedingung >expect "toll"< nicht erfüllt wird, sollte expect nach einer Sekunde in den Timeout laufen - was es auch macht, das Script wird nach einer Dekunde beendet.

Allerdings wird weder die Reihe von + Zeichen ausgegeben, noch wird der Return-Value auf 4 gesetzt.

Wo liegt mein Fehler?

Herakles

Code:
herakles@cheetah:~/scripts$ ./test.sh
xxxxxxxxxxxx
herakles@cheetah:~/scripts$ echo $?
0
herakles@cheetah:~/scripts$
 
Hier die Lösung:

Code:
#!/usr/bin/expect -f
exp_send "xxxxxxxxxxxx\n"
expect -timeout 1 \
	"toll" { exp_send "-----------\n" } \
	timeout { exp_send "++++++++++++\n"
		exit 4 }

Komischerweise ist von sowas in der manpage nichts zu finden...

Herakles
 
Expect ist zwar ein sehr gutes Tool, aber leider fehlt gute Dokumentation. Irgendwie hat jeder Unix-Admin ein paar expect-Scripte im Keller, aber man findet kaum was an guten Beispielen im Netz.
 
wen es interessiert ... Exploring Expect
OReilly ISBN 978-1-56592-090-3

auf http://www.thalia.de für knappe 27 EUR bestellbar.

Dass es zu Expect online nichts gibt, liegt wahrscheinlich am Alter des gesamten. Die aktuellste Auflage stammt aus dem Jahre 1996.

Signals, Interact, multiProcess, Background, Debugging sind jeweils eigene Kapitel gewidmet.


foxkilo
 
Zurück
Oben