expect:如何取消`expect_before`和`expect_after`?
expect: How to cancel `expect_before` and `expect_after`?
似乎使用 expect_before
或 expect_after
一次,它们将应用于任何 expect
之后,导致意外超时。
所以我想知道:如何取消前面的expect_before
或expect_after
?
到目前为止我尝试过但没有成功(它似乎仍然匹配 " "
)是:
expect_after
expect_after { }
还是我完全误解了这个概念?
试图控制类似 shell 的程序,这就是我所做的(大致):
- 当程序回显其输入 (
$cmd
) 时,使用 expect_before $cmd
- 由于程序会在命令后输出提示符(
$prompt
),所以使用expect_after $prompt
- 使用
expect
匹配实际的命令输出
但是有两个例外:
- 询问密码时,期待输入密码时不会出现
$prompt
;因此我想取消expect_after
。由于没有回显密码,我也想在发送密码时取消expect_before
。
- 退出程序时,执行
quit
命令后不会有提示,所以想取消expect_after
。
我认为您误解了 Tcl 大括号。它们不是特殊的语法,它们只是一种引用机制——它们就像 shell 单引号:内部没有插值。所以 expect_before { }
意味着您期待一个 space,并且没有指定任何操作。
我认为,要取消之前的期望,您可以使用不带参数的 expect_before
。
使用expect_before -info
查看当前状态。
要忽略发送的$cmd,我想你想要
expect_before -ex $cmd {exp_continue}
每次 cmd
变量更改时都需要重做。
似乎使用 expect_before
或 expect_after
一次,它们将应用于任何 expect
之后,导致意外超时。
所以我想知道:如何取消前面的expect_before
或expect_after
?
到目前为止我尝试过但没有成功(它似乎仍然匹配 " "
)是:
expect_after
expect_after { }
还是我完全误解了这个概念?
试图控制类似 shell 的程序,这就是我所做的(大致):
- 当程序回显其输入 (
$cmd
) 时,使用expect_before $cmd
- 由于程序会在命令后输出提示符(
$prompt
),所以使用expect_after $prompt
- 使用
expect
匹配实际的命令输出
但是有两个例外:
- 询问密码时,期待输入密码时不会出现
$prompt
;因此我想取消expect_after
。由于没有回显密码,我也想在发送密码时取消expect_before
。 - 退出程序时,执行
quit
命令后不会有提示,所以想取消expect_after
。
我认为您误解了 Tcl 大括号。它们不是特殊的语法,它们只是一种引用机制——它们就像 shell 单引号:内部没有插值。所以 expect_before { }
意味着您期待一个 space,并且没有指定任何操作。
我认为,要取消之前的期望,您可以使用不带参数的 expect_before
。
使用expect_before -info
查看当前状态。
要忽略发送的$cmd,我想你想要
expect_before -ex $cmd {exp_continue}
每次 cmd
变量更改时都需要重做。