考虑一个生成命令并等待一系列事件的预期脚本。我们用它来测试软件。我试图在超时时始终从脚本中获取失败返回值。
spawn some-command
set timeout 10
expect "First message"
expect "Other message"
即使超时,此脚本也将始终返回 0(成功)。处理超时的唯一方法是将每个 expect 语句转换为:
expect {
timeout { exit 1 }
eof { exit 1 }
"First message"
}
但这很快就变得难以处理。有什么简化的方法吗?是否有一个预期选项会导致提前超时/eof 致命错误?
答案1
评论meuh 的回答,expect_before
采用与 相同的参数expect
,因此您可以像这样编写:
expect_before {
timeout { puts "timeout"; exit 2 }
eof { puts "eof"; exit 1 }
}
# ...
expect "First message"
答案2
您可以设置一个命令。该命令将在脚本中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 "$ "