期待内部旗帜的价值

时间:2015-10-29 04:55:40

标签: tcl expect

这是一个发送期望序列自动化:

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中分隔标志和值?

2 个答案:

答案 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。