2

我发现在发送命令匹配来自发送命令的数据之后的期望命令。

让我们看看,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我得到:

生成 ./my.sh
你好
~你好~
通过:你好
好的
通过:好的
总计:2,通过:2,失败:0

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

4

1 回答 1

4

expect适用于 伪终端设备。它们很像普通终端:除非您禁用 echo(使用 expect 的 stty命令),否则您发送的任何内容也将作为您的“终端输出”(即 expect 的输入)可见。

stty_initexpect 使用变量来设置新创建的伪终端。如果添加set stty_init -echo到 的开头 my.exp,测试将开始失败。

于 2013-02-03T21:17:24.997 回答