expect:如何取消`expect_before`和`expect_after`?

expect: How to cancel `expect_before` and `expect_after`?

似乎使用 expect_beforeexpect_after 一次,它们将应用于任何 expect 之后,导致意外超时。

所以我想知道:如何取消前面的expect_beforeexpect_after

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

expect_after
expect_after { }

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

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

但是有两个例外:

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

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

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

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


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

expect_before -ex $cmd {exp_continue}

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