2008-09-25 6 views
0

Я пытаюсь заставить скрипт ожидания работать, а когда я использую флаг -re (для вызова регулярного выражения), ключевое слово 'timeout' похоже, больше не работает. Когда запускается следующий скрипт, я получаю сообщение «тайм-аут на шаге 1», затем «начальный шаг 2», а затем он истекает, но НЕ распечатывает «тайм-аут на шаге 2». Я просто получаю новое приглашение.Тайм-аут не работает с флагом '-re' в сценарии ожиданий

Идеи?

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

ответ

2
Figured it out: 

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

Да, «-re» флаг, как представляется, в вашем вопросе будет применяться к каждому шаблону в команде ожидать. Таким образом, шаблон «тайм-аута» становится «-re таймаутом», теряя свою особенность.

2

Кроме того, команда «exp_internal 1» очень ценна как инструмент отладки.