ターミナルを使っていると、色々自動化したくなる。シェルスクリプトとかちょっと書いてみるけど、パスワードなどを標準入力で待つものを自動化するのはシェルスクリプトだと多分ムリ(‘A`) そんなときに使えるのが expect っていう言語。画面上に表示される文字を待って、それに応じて待っている標準入力に値を入れてくれるというようなもの。
Manpage of expect が参考になった。
例えば、以下のような感じになる。set_timeout -1 は、タイムアウトしないようにする。これをやると、多分待つものをミスったら永遠に止まっちゃう。spawn でコマンドを実行するみたい。そのあと、expect “string” で画面に表示される文字を待つ。それが出たら、send “string” で文字を送信する。だいたいは、入力の最後に Enter を押すと思うので、それも一緒に送ってあげる。inter_act で、次へ行くことになる。 log_file は、画面に出たことがそのまま保存されるようだ。
#! /usr/bin/expect -- set timeout -1 log_file log spawn passwd user1 expect "New Password:" send "password\\r" expect "Reenter New Password:" send "password\\r" interact