我想为我的expect脚本实现错误处理。 我的主要问题是expect命令只等待而不是在它们不匹配时中止。我想出了如何对超时作出反应。
expect {
timeout exit
"Name."
}
我必须为每个expect命令指定一个超时操作。 有没有办法为每个expect命令定义一个全局行为?
我想记录收到的输出和上一个发送命令
答案 0 :(得分:1)
您可以使用expect_after
或expect_before
:
expect_after [expect_args]
与 expect_before 的工作方式相同,只是模式 从期望和 expect_after 可以匹配, expect 模式 用来。
expect_before [expect_args]
采用与 expect 相同的参数,但它会返回 立即。来自最新 expect_before 的模式 - 动作对 具有相同的spawn id隐式添加到任何后续 期待命令。如果模式匹配,则将其视为模式 已在 expect 命令本身中指定,并且已关联 body在 expect 命令的上下文中执行。如果 来自 expect_before 和期望的模式可以匹配, 使用了 expect_before 模式 ......
以下是一个简单的例子:
[STEP 101] $ cat foo.exp
spawn bash --noprofile --norc
expect_after timeout {
incr n_timeout
send "echo 'timeout #$n_timeout'\r"
}
set timeout 2
set n_timeout 0
expect {
foo {}
}
expect {
bar {}
}
send "exit\r"
expect eof
[STEP 102] $ expect foo.exp
spawn bash --noprofile --norc
bash-4.3$ echo 'timeout #1'
timeout #1
bash-4.3$ echo 'timeout #2'
timeout #2
bash-4.3$ exit
exit
[STEP 103] $