揮発性のメモ2

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

expectで、ログを取りながらログインする

#!/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もログには残らない


[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]

スポーン ディレクターズカット【Blu-ray】 [ マイケル・J.ホワイト ]
価格:1080円(税込、送料無料) (2018/12/11時点)