“期待”匹配“发送”字符串,为什么?

时间:2013-02-03 21:02:45

标签: shell terminal tcl expect

发送命令与发送命令匹配数据后,我发现期待命令。

让我们看一下 my.sh

#!/bin/sh
read line
echo ok

my.exp (有些代码是多余的,我模仿DejaGNU测试框架......):

set passn 0
proc pass {msg} { global passn; incr passn; send_user "PASS: $msg\n" }
set failn 0
proc fail {msg} { global failn; incr failn; send_user "FAIL: $msg\n" }
proc check {} {
    global passn failn;
    send_user "TOTOAL: [expr $passn + $failn], PASSED: $passn, FAIL: $failn\n"
    if {$failn == 0} { exit 0 } { exit 1 }
}

set timeout 1

spawn ./my.sh

send hello\n
expect {
    -ex hello {
        send_user "~$expect_out(0,string)~\n"
        pass hello
    }
    default { fail hello }
}
expect {
    -ex ok { pass ok }
    default { fail ok }
}

check

当运行期望my.exp 时,我得到:

spawn ./my.sh
hello
~hello~
PASS: hello
ok
PASS: ok
TOTOAL: 2, PASSED: 2, FAIL: 0

我不明白为什么你好匹配!!请告诉我。我已经读过了:

1 个答案:

答案 0 :(得分:4)

expect可以使用 pseudoterminal devices。他们是 很像普通的终端:除非你禁用echo(使用expect的 stty命令),无论你发送什么,也可以看作你的“终端 输出“(这是期望的输入)。

期望设置新创建的

stty_init变量 虚拟终端。如果您将set stty_init -echo添加到的开头 my.exp,测试将开始失败。