我正在写一个期望脚本来自动化一些测试。要检测何时发生一般错误(可能发生在测试的任何阶段),而不是在每个expect
命令上重复相同的模式(例如,“重新启动系统”),我决定使用{{1对于那种情况。
我对expect_background
命令的理解是,在当前活动的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"; }
}
脚本从1到20计数,间隔为1秒。根据我上面描述的行为,./counter.sh
应该打印在"expect-bg"
和5
,15
打印在expect-9
,9
打印在"expect-20"
1}}。但这是我得到的:
20
为什么会这样?我如何得到描述的行为?
答案 0 :(得分:0)
我可以使用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。