Тайм-аут не работает с флагом '-re' в ожидаемом скрипте

StackOverflow https://stackoverflow.com/questions/136554

  •  02-07-2019
  •  | 
  •  

Вопрос

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

Идеи?

#!/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"}
}
Это было полезно?

Решение

Figured it out:

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

Другие советы

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top