expect_background影响其他期望的行为

时间:2013-10-21 11:41:30

标签: expect

我正在写一个期望脚本来自动化一些测试。要检测何时发生一般错误(可能发生在测试的任何阶段),而不是在每个expect命令上重复相同的模式(例如,“重新启动系统”),我决定使用{{1对于那种情况。

我对expect_background命令的理解是,在当前活动的expect_background之前检查所有输入文本。因此,如果expectexpect_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"515打印在expect-99打印在"expect-20" 1}}。但这是我得到的:

20

为什么会这样?我如何得到描述的行为?

1 个答案:

答案 0 :(得分:0)

我可以使用expect_beforeexp_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。