Skip to content

expectコマンドとタイムアウトの設定

expect(1)はTCLを使ったDSLなのでTcl言語の基本構文がそのまま利用できる。

expect 命令で待っているとき、デフォルトでは指定したパターンが10秒以内に届かなければタイムアウトする。この待ち時間はグローバルなタイムアウト変数を参照しているので、例えば100秒待ちたければ以下のように変更できる。

set timeout 100

無制限にしたい場合は -1 を設定する。

set timeout -1

それでもタイムアウトする場合、特にエラーもなく次へ進む。例えば以下の場合、

set timeout 10
expect "term% "
send "lc\r"

こうすると、10秒以内に term% が検出できなければタイムアウトが発生し、プロンプトを待つことなく lc コマンドが送信される。

それでは困る場合、以下のようにするとタイムアウトを1補足できる。

expect {
timeout {
puts stderr "timeout"
exit 1
}
"term% "
}
send "lc\r"

expect 命令が登場するたびに何度も timeout パターンを書くのは大変なので、expect_beforeexpect_after が使えるらしいが試したことはない。

  1. timeout 以外にも defaulteof がある