#!/usr/bin/expect -f set IPADDR "192.168.0.2" set USERID "hoge" set USERPW "piyo" set LOGFILE "test.log" # エラー・タイムアウト用関数 proc ABORT {} { exit 1 } # ログ取得開始 log_file $LOGFILE # expectのタイムアウトを30秒とする set timeout 30 # ログイン spawn ssh $USERID@$IPADDR expect { default ABORT "assword:" { send "$USERPW\n"; exp_continue } "\\$ " } # 制御をユーザーに渡す interact puts "END" exit 0
今日勉強したこと:
- 文字としての$記号は、\\$と二重エスケープしないといけない
- 本来\$とすべきところだけど、\もエスケープ対象なので
- 制御をユーザーに渡すと、spawnしたコマンドが終了するまでinteractは終わらない
- タイムアウトも無い
- sendで文字列を送るとき、改行は\r
- \nを使ってもどうせ\r\nに変換されるので、そんなに気にしなくてよい
- ログにはspawn関数自体も表示される
- spawn以外のほかの関数はログに出ない
- putsもログには残らない