match - 期望:如何取消 `expect_before` 和 `expect_after`?
问题描述
似乎使用expect_before
orexpect_after
一次,它们被应用于任何expect
后续,导致意外超时。
所以我想知道:我怎样才能取消前面的expect_before
or 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 { }
意味着您期望一个空格,并且没有指定任何操作。
我认为,要取消之前的期望,您可以expect_before
不带参数使用。
用于expect_before -info
查看当前状态。
要忽略发送的 $cmd,我想你想要
expect_before -ex $cmd {exp_continue}
每次cmd
变量更改时,您都需要重做。
推荐阅读
- php - 使用两个不同的表比较并插入日期和日历周
- javascript - jquery ajax 到 vanilla javascript(普通 javascript)代码转换请求
- asp.net-core - 如何使用基于策略的授权将所需的声明附加到令牌?
- flutter - 飞镖 | 将秒转换为 DateTime 而不计算
- google-cloud-platform - 如何使用 Google Ads API 更改我的应用程序设置以使刷新令牌不会过期?
- linux - 如何在 Linux 中通过 USB 使用 libcoap 进行通信?
- javascript - 将 async await 与 Promise all 一起使用,但未获得所需的输出
- excel-formula - 获取值大于 0 的所有列的值
- swift - 添加枚举后失去了对 Codable 的一致性
- attachment - 如何使用 puppeteer 将外部文件和流附加到 PDF 文档?