Рассмотрим сценарий ожидания, который порождает команду и ожидает последовательности событий. Мы используем это для тестирования программного обеспечения. Я пытаюсь всегда получать из сценария возвращаемое значение ошибки, когда есть тайм-аут.
spawn some-command
set timeout 10
expect "First message"
expect "Other message"
Этот скрипт всегда будет возвращать 0 (успех), даже если истечет время ожидания. Единственный способ обработать тайм-ауты - это преобразовать каждый оператор ожидания с помощью:
expect {
timeout { exit 1 }
eof { exit 1 }
"First message"
}
Но это быстро становится громоздким. Есть ли упрощения? Есть ли опция ожидания, которая делает ранний тайм-аут / завершение фатальных ошибок?
Комментируя Меу ответ, expect_before
принимает те же аргументы, что и expect
, так что вы можете написать это так:
expect_before {
timeout { puts "timeout"; exit 2 }
eof { puts "eof"; exit 1 }
}
# ...
expect "First message"
Вы можете настроить expect_before
команда. Это будет запускаться каждый раз, когда вы используете expect
позже в сценарии. Например
proc abort { } { send_user "Timeout!" ; exit 2 }
set timeout 5
spawn ssh myhost
expect_before timeout abort
expect "assword: "
send "abc\r"
expect "$ "
send "sleep 99\r"
expect "$ "