在Expect脚本中,程序可以根据系统配置提供不同的输出。我需要处理Expect块中用于不同输出的输出,并相应地提供输入以继续执行程序。是否有某种方法可以期望代码块可以编写,以便它可以找到匹配的模式,然后继续执行并休息其他模式?
Sample script
spawn myprogram
expect {
-re "pattern1" {send -- "str1 \r"}
-re "pattern2" {send -- "str2 \r"}
-re "pattern3" {send -- "str3 \r"}
}
在此基于输出中的模式,需要采取措施。
答案 0 :(得分:1)
您是否使用那些双破折号来强制将send
的参数解释为字符串?如果是这样,我认为您需要在--
之后和字符串之前输入空格:
expect {
-re "pattern1" {send -- "str1 \r"}
-re "pattern2" {send -- "str2 \r"}
-re "pattern3" {send -- "str3 \r"}
}
在没有空格的情况下,似乎希望将第一个-
之后的所有内容都视为一个大标志。
要回答您的问题,是的,这似乎是可行的起点,请按照您的要求进行操作:它将监视testscript
的输出,并等到其中一个正则表达式匹配或直到超时到期(由于未设置超时期限,因此默认为10秒)或直到收到EOF。如果其中一个正则表达式匹配,它将分支到匹配表达式之后的代码部分。
如果您习惯使用PCRE或Vim ...,请小心使用TCL regex语法。