2008-09-25 12 views
0

J'essaie de faire fonctionner un script attendu, et lorsque j'utilise l'option -re (pour appeler l'analyse d'expression régulière), le mot-clé 'timeout' semble ne plus fonctionner. Lorsque le script suivant est exécuté, j'obtiens le message 'expiré à l'étape 1', puis 'début de l'étape 2' et puis il expire mais n'imprime pas le 'délai dépassé à l'étape 2' Je reçois juste une nouvelle invite.Le délai d'expiration ne fonctionne pas avec l'option '-re' dans le script

Des idées?

#!/usr/bin/expect -- 

spawn $env(SHELL) 
match_max 100000 

set timeout 2 

send "echo This will print timed out\r" 
expect { 
    timeout { puts "timed out at step 1" } 
    "foo " { puts "it said foo at step 1"} 
} 

puts "Starting test two\r" 

send "echo This will not print timed out\r" 
expect -re { 
    timeout { puts "timed out at step 2" ; exit } 
    "foo " { puts "it said foo at step 2"} 
} 

Répondre

2
Figured it out: 

expect { 
    timeout { puts "timed out at step 2" ; exit } 
    -re "foo " { puts "it said foo at step 2"} 
} 
2

Oui, le drapeau « -re » tel qu'il apparaît dans votre question s'appliquera à chaque modèle dans la commande attendre. Ainsi, le motif "timeout" devient "-re timeout", perdant sa particularité.

2

En outre, la commande "exp_internal 1" est très utile en tant qu'outil de débogage.