预期不匹配

时间:2018-10-05 10:46:15

标签: tcl expect

我有一个期望脚本正在运行;它包含以下几行:

expect "\[Y\]\> "
send "n\r"

我正在与之交互的OS发生了变化,我现在有一个混合的盒子环境。在我要处理的问题上,有些现在带有“ [Y]>”,有些带有“ [1]>”。

我尝试将代码更改为:

expect {
        "\[Y\]\> " { send "n\r";exp_continue }
        "\[1\]\> " { send "2\r";exp_continue }
}

但是,在调试中运行,我看到:

"Choose the password option:
1. Mask passwords 
2. Plain passphrases
[1]>
expect: does "s...ses\r\n[1]> " (spawn_id exp5) match glob pattern "[Y]> "? no 
"[1]> "? no
expect: timed out"

我不明白为什么在引入“ else”语句之前匹配“ [Y]>”时,对于“ [Y]>”或“ [1]>”而言,修改后的代码为何不起作用

1 个答案:

答案 0 :(得分:1)

问题在于转义Tcl专用的方括号。

# Using braces for pattern
expect {
    {\[Y]>} {puts Y}
    {\[1]>} { puts 1}
}
# or 
# Using double quotes
expect {
    "\\\[Y]>" {puts Y}
    "\\\[1]>" { puts 1}
}

我们不必逃脱右括号]和符号>