我正在编写一个expect脚本来自动化一些测试。为了检测何时发生一般错误(在测试的任何阶段都可能发生),我决定对这种情况使用expect_background,而不是在每个expect命令上重复相同的模式(例如,“重新启动系统”)。
我对expect_background命令的理解是,它是根据当前活动expect之前的所有输入文本进行检查的。因此,如果expect_background和expect都在等待相同的模式,我希望(请使用双关语;-)这两个操作都会被触发。例如:
#!/usr/bin/expect -f
spawn ./counter.sh
expect_background {
"5" { puts "expect-bg"; }
}
expect {
"9" { puts "expect-9"; }
}
expect {
"20" { puts "expect-20"; }
}./counter.sh脚本以1秒为间隔从1计数到20。根据我上面描述的行为,"expect-bg"应该在5和15上打印,expect-9在9上打印,"expect-20"在20上打印。但这是我得到的:
$ ./expect_bg.expect
spawn ./counter.sh
1
2
3
4
5
expect-bg
6
7
8
9
10
11
12
13
14
15
expect-bg
16
17
18
19
20为什么会发生这种情况?如何描述这些行为呢?
发布于 2013-10-22 00:38:59
我可以用expect_before和exp_continue生成您想要的输出
#!/usr/bin/expect -f
spawn sh counter.sh
expect_before {
5 {puts "expect_before"; exp_continue}
}
expect {
9 {puts "exp_9"}
}
expect {
20 {puts "exp_20"}
}$ expect counter.exp
spawn sh counter.sh
1
2
3
4
5
expect_before
6
7
8
9
exp_9
10
11
12
13
14
15
expect_before
16
17
18
19
20
exp_20当你有了
expect_before {
5 {puts "expect_before"; exp_continue}
}
expect {
9 {puts "exp_9"}
}您有效地拥有了以下内容:
expect {
5 {puts "expect_before"; exp_continue}
9 {puts "exp_9"}
}如果省略了exp_continue,expect语句将以前5结束,因此您永远不会有机会查找9。
https://stackoverflow.com/questions/19493572
复制相似问题