linux下でexpectツールはメモを使います。


1 expectツールの紹介はこのサイトを参照してください。http://hi.baidu.com/widebright/blog/item/5ecf33ad68abf00c4b36d6e1.html
自動的に相互作用するツールで、使うTcl言語はspawn、expect、send、waitなどがあります。
Expectマニュアル? Manpage of Expect http://www.tcl.tk/man/expect5.31/expect.1.html
2 sshでの使用
 linuxの下でこのツールをインストールすると使用できます。
以下の例は簡単なスクリプトで、サーバ名を入力して自動的にパスワードを入力することができます。簡単なコマンドだけでログインできます。
#!/usr/bin/expect -f

#auto ssh login
set timeout 30
set sshhost [lindex $argv 0]
spawn ssh [email protected].$sshhost
expect "password:"
send "  \r"
interact
このスクリプトの実行可能権限を変更すると、LANの最後のip値を入力してログインできます。
Androidでコードを更新する時にもこのツールを使うことができます。repoの時にパスワードを入力してください。パスワードが長くて頻繁に更新するなら、似たようなスクリプトを書くことも考えられます。以下はプロジェクトで使ったものです。
#!/usr/bin/expect -f

spawn repo sync
expect "password:"
send "  \r"
interact
Expect作業原理
最も簡単なレベルから言えば、Expectの働き方は汎用化されたChatスクリプトツールのようです。ChatスクリプトはUUCPネットワーク内で最初に使用され、コンピュータ間で接続を確立する必要があるときに特定の登録セッションの自動化を行うために使用されます。
Chatスクリプトは一連のexpect-sendペアから構成されています。expectは出力待ちの中で特定の文字を出力します。通常は1つのプロンプトです。そして特定の応答を送ります。例えば、次のChatスクリプトの実現待ち標準出力にはLogin:文字列が現れ、そしてsomebodyをユーザ名として送信します。その後、Password:プロンプトを待って、sillymeに応答します。
引用:Login:somebody Password:sillyme
このスクリプトはログインプロセスを実行して、特定のユーザー名とパスワードでログインします。
Expectの最も簡単なシナリオの操作モードは本質的にChatスクリプトの動作モードと同じです。