TclをベースとしたCLI環境で対話的なオペレーションを実現するためのコマンドです。元々はシステム管理者の作業を自動化するために用意されたものですが、テスト自動化エンジニアの視点からもおいしい環境と言えます。例えば、とあるサーバのssh待ち受けポートが22番ではないことを確認するexpectスクリプトは以下の様になります。
※一般的にsshのポートはdefaultから変更すべきとされています
#!/usr/bin/expect
set timeout 5
spawn ssh example.com -p $argv
expect {
"Connection refused" {puts "PASSED"; exit}
"password:" {puts "FAILED"; exit}
}
interact
上記を text1.sh などとして保存し、このまま実行するか、 expect コマンドの引数として渡す形で実行します。第一引数で閉じていることが期待されるポート番号(例えば22)を渡し、sshを別プロセスで実行し、もし "password:" という文字列が表示されれば(= そのポートで受け付けている) FAILED という文字列を返します。