如何在expect中返回不匹配的字符串

时间:2012-04-18 07:31:08

标签: bash return tcl expect

在我的脚本中,我想返回不匹配的字符串。 我试过了puts $expect_out(buffer),但它没有用,并且给了我以下错误

can't read "expect_out(buffer)": no such variable
    while executing
"puts "out is $expect_out(buffer)" "

expect {
     -nocase -re "$arg3" { exit 0 } 
    timeout  { puts "Does not matched, output is $expect_out(buffer)" ; exit 2 }"
}

1 个答案:

答案 0 :(得分:0)

expect_out数组在匹配发生之前不存在,因此如果您之前未在代码中匹配expect调用并且实际达到了timeout子句,则会收到no such variable错误。

  

期待联机帮助

     

“在匹配模式(或eof或full_buffer)时,任何匹配和先前不匹配的输出都保存在变量expect_out(buffer)中。最多9个regexp子串匹配保存在变量expect_out(1,string)到expect_out (9,字符串)。如果在模式之前使用-indices标志,则10个字符串的起始和结束索引(以适合lrange的形式)存储在变量expect_out(X,start)和expect_out(X,结束)其中X是一个数字,对应于缓冲区中的子字符串位置.0指的是与整个模式匹配的字符串,为glob模式和regexp模式生成。“

您可以通过info exists expect_out对此进行测试,并使用array names expect_out打印出数组键/值(如果存在)。

你可以通过set expect_out(key) value自己设置显示值,但是我无法(我知道)最初检索不匹配的字符串,使用log_file expectoutput.txt进行操作并在以后读取它超时。