expectコマンドtips
対話的なコマンドを自動で行わせるためのコマンドとしてexpectというのがある。で「予期」している文字列パターンを正規表現で行うにはexpectコマンド「内部」のexpectコマンドに-re
オプションをつける必要がある。
以下では、「リモートホスト名」のホストにsshでログインし、uname -aを発行してexitとするという単純なプログラム。
$ cat expect-test.sh #!/bin/sh /usr/bin/expect -c " set timeout 10 spawn ssh リモートホスト名 expect -re \".* password:\" send \"パスワード\" send \r expect -re \".*> \" send \"uname -a\" send \r expect eof exit 0 " $ sh expect-test.sh spawn ssh リモートホスト名 kohchi@リモートホスト名's password: Last login: Sat Apr 12 14:42:28 2014 from 自分のFQDN kohchi@リモートホスト名:~> uname -a Linux リモートホスト名 2.6.32.61-smp #1 SMP Wed Jul 10 20:34:58 JST 2013 i686 GNU/Linux $
パスワードプロンプトとシェルプロンプトを正規表現で待ち受ける。なお、文字列が決まっていれば-re
をつけずにそのままその文字列を記載すればいいだけ。