1

在expect脚本里面,程序可以根据系统配置给出不同的输出。我需要为不同的输出处理期望块内的输出,并相应地提供输入以继续执行程序。有什么方法可以编写期望块,以便它可以找到匹配的模式并继续并忽略其他模式?

Sample script 

    spawn myprogram
     expect {
                        -re "pattern1" {send -- "str1 \r"}
                        -re "pattern2" {send -- "str2 \r"}
                        -re "pattern3" {send -- "str3 \r"}
               }

这里根据输出中的模式,需要采取行动。

4

1 回答 1

1

您是否使用这些双破折号来强制将参数send解释为字符串?如果是这样,我认为您--在字符串之后和之前需要空格:

expect {
                -re "pattern1" {send -- "str1 \r"}
                -re "pattern2" {send -- "str2 \r"}
                -re "pattern3" {send -- "str3 \r"}
       }

没有空间,它似乎想将第一个之后的所有内容都-视为一面大旗。

要回答你的问题,是的,这看起来像一个可行的起点做你所要求的:它会观察输出testscript并等到正则表达式之一匹配,或者直到超时到期(因为你没有设置超时时间,默认为 10 秒)或直到收到 EOF。如果其中一个正则表达式匹配,它将分支到匹配表达式后面的代码部分。

如果您习惯于 PCRE 或 Vim,请注意 TCL 正则表达式语法...

于 2018-12-26T09:52:10.603 回答