interactは対話に使うものなので、タイムアウトしてくれない。
無限待ちになったらいやなので、バッチ処理では使わないようにする。
#!/usr/bin/expect -f log_user 0 set timeout 5 spawn ssh hoge@192.168.1.2 "echo 10秒待つ; sleep 10; ls" expect { "assword:" { send "password\r" } timeout { send_error "\nLOGIN TIMEOUT\n"; exit 1 } eof { send_error "\nLOGIN DISCONNECT\n"; exit 1 } } #interact log_user 1 expect { timeout { send_error "\nCOMMAND TIMEOUT\n"; exit 1 } }
最小の書き方だとこんなふうになる
#!/usr/bin/expect -f log_user 0 spawn ssh hoge@192.168.1.2 ls expect assword: { send password\r; log_user 1; expect }