使用expect实现调试脚本的自动化



运行调试命令后,它的输出非常大。。所以在某个时刻,它一直在询问

Type <return> to continue,or q <return> to quit

现在,我想针对不同的错误自动执行这些命令。但是,在调试不同的错误时,我上面提到的这个特定语句不断变化。有时一个bug会出现两次,有时另一个bug则会出现五次。我该如何编写一个期望的脚本,以便为这些脚本提供继续选项?

如果我们不知道某些模式的出现顺序,甚至不知道次数,那么exp_continue是正确的命令。

expect {
    <pattern1> {send "cmd1"; exp_continue}
    <pattern2> {send "cmd2"; exp_continue}
    <pattern3> {send "cmd3"}
}

在上面的例子中,假设pattern1pattern2可能不按相同的顺序到达,并且出现的次数也不同,则cmd1cmd2将被发送,并且Expect仍将再次运行。

命令exp_continue允许Expect本身继续执行,而不是像正常情况下那样返回。这对于避免显式循环或重复的期望语句非常有用。

默认情况下,exp_continue会重置超时计时器。如果使用-continue_timer标志调用exp_continue,则计时器不会重新启动。

在你的情况下,我们可以写一些类似的东西

expect {
    "Type <return> to continue,or q <return> to quit" {send "r";exp_continue}
    "some-more-patterns" {#handler_here}
}

最新更新