2

sendコマンドの直後のexpectコマンドがsendコマンドからのデータと一致することがわかりました。

見てみましょう、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
こんにちは
〜こんにちは〜
パス:こんにちは
わかった
パス:わかりました
TOTOAL:2、PASSED:2、FAIL:0

どうしてハローがマッチしたのかわからない!! 教えてください。私はすでに読み直しました:

4

1 に答える 1

4

expect疑似端末デバイスで動作し ます。これらは通常の端末によく似ています。(expectの sttyコマンドを使用して)echoを無効にしない限り、送信したものはすべて「端末出力」(expectの入力)としても表示されます。

stty_init変数は、新しく作成された疑似端末をセットアップするためにexpectによって使用されます。set stty_init -echoのbeginnigに 追加するmy.expと、テストは失敗し始めます。

于 2013-02-03T21:17:24.997 に答える