2013年11月25日

expectをつかってみた。

expectという対話的なプログラムとのやりとりを自動化するプログラムの存在を初めて知った。

svnsync syncの自動同期をずーとやりたかったのだけど、--source-passwordや、--sync-passwordオプションを付けてもRSA認証の仕組み入れてみたりしても、パスフレーズの省略が出来なくて困っていた。

そこで方向転換して勝手にパスワード入力してくれないものか?と探して見つけたのがexpectだ。

簡単に各コマンドの説明を貼っておく。


set timeout:expectのタイムアウト値はデフォルトで10秒になっているので10秒以上かかると思われる処理の場合 set timeout -1 でタイムアウトしないようにします。

spawn:自動で実行したいコマンドを指定。

expect:指定された文字列(「”」に囲まれた文字)と標準入力のデータとを正規表現で比較し、一致するまで以降の命令を実行しません。

send:指定された文字列(「”」に囲まれた文字)を先に実行したコマンドのジョブに送信します。

interact:自動実行を終了。実行ジョブの標準入出力をキーボードと画面にします。



実際に作ったシェルが以下。


#!/usr/bin/expect

#タイムアウト
set timeout 10
# svnsync起動
spawn svnsync sync svn+ssh://svnuser@192.168.XXX.YYY/repos
#パスワード入力
expect "svnuser@192.168.XXX.YYY's password:"
send "sync-password\n"
expect "svnuser@192.168.WWW.ZZZ's password:"
send "source-password\n"

interact


このシェルを実行してみると。。。出来た。。。嬉しい。。。

これをCronに登録すればやっと自動化完了です。
posted by hana at 19:15| Comment(0) | TrackBack(0) | Linux関連 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。
※ブログオーナーが承認したコメントのみ表示されます。

この記事へのトラックバック