首页 > 解决方案 > 期望:如何取消 `expect_before` 和 `expect_after`?

问题描述

似乎使用expect_beforeorexpect_after一次,它们被应用于任何expect后续,导致意外超时。

所以我想知道:我怎样才能取消前面的expect_beforeor expect_after

到目前为止我没有成功的尝试(它似乎仍然匹配" ")是:

expect_after
expect_after { }

还是我完全误解了这个概念?

试图控制一个类似 shell 的程序,这就是我所做的(大致):

但是有两个例外:

  1. 要求输入密码时,不会出现$prompt期待密码输入时;因此我想取消expect_after. 由于密码没有回显,我也想expect_before在发送密码时取消。
  2. 退出程序时,执行命令后没有提示quit,所以想取消expect_after

标签: matchexpect

解决方案


我认为您误解了 Tcl 大括号。它们不是特殊的语法,它们只是一种引用机制——它们就像 shell 单引号:内部没有插值。所以expect_before { }意味着您期望一个空格,并且没有指定任何操作。

我认为,要取消之前的期望,您可以expect_before不带参数使用。

用于expect_before -info查看当前状态。


要忽略发送的 $cmd,我想你想要

expect_before -ex $cmd {exp_continue}

每次cmd变量更改时,您都需要重做。


推荐阅读