这是一个发送期望序列自动化:
proc se {cmd ex} {
send $cmd\r
expect {
$ex {return}
"timeout" {send_user "ops"; exit 0} }
}
通常我用简单的args调用proc se :
se "show run" "#"
但有时我不得不期待正则表达式:
se "show int" "-re interface.{4}"
得到错误:
bad flag "-re interface.{4}" must be -glob, -regexp, -exact ...
如何强制Expect在argumet中分隔标志和值?
答案 0 :(得分:2)
如果您使用的是Tcl8.5或更高版本,则可以使用参数扩展运算符{*}
。否则,请继续eval
Tcl8.5或以上
proc se {cmd ex} {
send $cmd\r
expect \
timeout {send_user "ops";exit 0} \
{*}$ex {puts "matched pattern"}
}
小于Tcl8.5
proc se {cmd ex} {
send $cmd\r
eval expect \
timeout {{send_user "ops";exit 0}} \
$ex {{puts "Matched pattern"}}
}
答案 1 :(得分:0)
我发现自己的愿望毫无意义,并且更愿意将$ ex作为列表运行。如果$ ex以" - "开头,则将$ ex的第一个元素抛给expect的选项,否则$ ex是body。