tcl自动保存结果expect_tcl expect 到底是如何匹配输出的?

本文深入探讨了expect命令的匹配机制,通过示例代码解释了其如何处理匹配位置和文本保留。强调了expect匹配对象的特性,如它会记住最后一个匹配的位置,并在下次匹配时从该位置开始。同时,指出在编写交互式脚本时,必须遵循一问一答的模式,不能连续send数据,以确保脚本的正常运行。这对于理解和编写expect脚本至关重要。
摘要由CSDN通过智能技术生成

expect的规则看似简单,一旦进入书写代码阶段,首先碰到的就是匹配问题。深入理解这个匹配,后续的书写就会顺畅许多。

先看一段示例代码:

package require Expect

spawn echo "abcdef"

expect {

a {

puts a

exp_continue

}

b {

puts b

exp_continue

}

a* {

puts a*

exp_continue

}

eof {}

timeout {}

}

输出:

spawn echo abcdef

abcdef

a

b

匹配对象

expect似乎会记住最后一个匹配的位置(记作p),每次新的匹配都是从p开始。也可以描述成expect丢弃已经匹配的文本,保留尚未匹配的文本再加上接下来的输出(具体是什么情况不重要)。为什么得出这个结论呢?如果不是这样,上面的示例代码就会进入循环。a 和 a*。

匹配多少

如果是a这样的模式,你无法确定a到底匹配多少,只有在尾部特征的匹配才是可控的。如果是*f,那么必须等到f出现才会匹配,或者timeout 或者eof

$expect_out(buffer)

只有在匹配之后,该值才会最新的内容。同时也可以确定,匹配对象不是$expect_out(buffer).

必须是一问一答的模式

你不能在一个匹配中连续send数据,必须是一问一答的方式。以sql输入为例,必须在上一个sql结束后再次输入。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值