揮発性のメモ2

http://d.hatena.ne.jp/iww/

expectでinteractは危険なのでexpectを使う

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 }