1

私のスクリプトでは、一致しない文字列を返したいと思っています。試してみ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 }"
}
4

1 に答える 1

0

一致が発生するまで配列は存在しないため、expect_out以前にコード内のexpect呼び出しに一致しておらず、実際にタイムアウト句に達した場合は、no such variableエラーが発生します。

マンページを期待する

"パターン(またはeofまたはfull_buffer)に一致すると、一致する出力と以前に一致しなかった出力が変数expect_out(buffer)に保存されます。最大9つの正規表現サブストリング一致がexpect_out(1、string)からexpect_out(9、文字列)。パターンの前に-indicesフラグが使用されている場合、10個の文字列の開始インデックスと終了インデックス(lrangeに適した形式)が変数expect_out(X、start)およびexpect_out(X、end)に格納されます。 Xは数字で、バッファ内のサブストリングの位置に対応します。0は、パターン全体に一致するストリングを指し、globパターンとregexpパターンに対して生成されます。」

これをテストinfo exists expect_outし、を使用して配列のキー/値(存在する場合)を出力できarray names expect_outます。

を介して自分で明示的に値を設定できますがset expect_out(key) value、最初に一致しない文字列を取得する方法はありlog_file expectoutput.txtません。タイムアウトした場合は、それを使用して読み戻すことはできません。

于 2012-04-18T21:27:37.117 に答える