expectコマンドとタイムアウトの設定
expect(1)はTCLを使ったDSLなのでTcl言語の基本構文がそのまま利用できる。
expect 命令で待っているとき、デフォルトでは指定したパターンが10秒以内に届かなければタイムアウトする。この待ち時間はグローバルなタイムアウト変数を参照しているので、例えば100秒待ちたければ以下のように変更できる。
set timeout 100無制限にしたい場合は -1 を設定する。
set timeout -1それでもタイムアウトする場合、特にエラーもなく次へ進む。例えば以下の場合、
set timeout 10expect "term% "send "lc\r"こうすると、10秒以内に term% が検出できなければタイムアウトが発生し、プロンプトを待つことなく lc コマンドが送信される。
それでは困る場合、以下のようにするとタイムアウトを1補足できる。
expect { timeout { puts stderr "timeout" exit 1 } "term% "}send "lc\r"expect 命令が登場するたびに何度も timeout パターンを書くのは大変なので、expect_before や expect_after が使えるらしいが試したことはない。
Footnotes
Section titled “Footnotes”-
timeout 以外にも default や eof がある ↩