期待脚本操作顺序

时间:2012-05-18 03:20:27

标签: tcl expect

首先,我会承认自己是一个非常新的人,期待脚本我已经玩了大约3天了。我拿起O'Reilly的书,正在努力完成它。然而,我对期望的流动感到有些困惑,并希望得到一些指导。

我在下面有以下代码片段。 if语句的上半部分完美运行。但是,elseif部分不能按预期工作。它执行,只是故障。它首先处理puts线,然后通过send命令运行。我想知道它为什么这样做以及如何使它按顺序执行。

另外我想做的另一个调整是,当$ MD5没有匹配时,我不想等待超时。所以基本上我想要$ MD5或任何不是$ MD5的东西,这样我就不必坐在默认的超时时间。我意识到我可以期待 - 超过1“$ MD5”并缩短窗口,但我想知道是否有一种更优雅的方式来处理它。

提前谢谢。

expect "$MD5"
if {$MD5 == $expect_out(0,string)} {
    send "config t\r";
    send "no boot system\r";
    send "boot system flash:$IOS\r";
    send "exit\r";
    send "wr mem\r";
    expect "OK";
    send "exit\r";
    puts -nonewline "\nIOS Upgrade Successful and Bootvar changed.\n"
    exit
} elseif {$MD5 != $expect_out(0,string)} {
    send "delete flash:$IOS\r";
    send "\r";
    send "\r";
    send "exit\r";
    puts -nonewline "\nIOS Upgrade FAILED MD5 Hash did not match!\n";
    expect eof
    exit
}

1 个答案:

答案 0 :(得分:3)

根据生成的应用程序实际接受数据的速度(也有一些其他速率限制器),Expect实际上异步处理send。为了让事情等待,您需要使用expect

修复方法是将puts放在expect eof之后(或事先添加expect其他内容,例如在执行delete flash:…后获得的提示