AUTOEXPECT(1) AUTOEXPECT(1) 名前 autoexpect - セッションを監視することによりExpectスクリプトを生成する 書式 autoexpect [ args ] [ program args... ] イントロダクション autoexpect は 、 あ な たとプログラムとの対話を監視し、その対話を再現す るExpectスクリプトを生成する。直線的なスクリプトなので、スクリプトを 手 作 業で書くのに比べ相当な時間を節約できる。たとえあなたがExpectのエキス パートだとしても、対話のより機械的な部分を自動化するためにautoexpect を 使うと便利であることが分かるだろう。 autoexpectの生成したスクリプトの一 部をカットアンドペーストした方がゼロから書き始めるよりとても簡単であ る 。 そ し てもしあなたが初心者だとしたら、Expectについて何も知らなくても autoexpectの起動方法を習うだけで用が足りるかもしれない。 autoexpectを使う最も簡単な方法は、コマンドラインから引数なしで呼び出 す ことである。デフォルトでシェルを起動する。 例: % autoexpect プログラム名と引数が与えられるとautoexpectはそのプログラムを起動する。 例: % autoexpect ftp ftp.cme.nist.gov 一 旦プログラムが起動されれば、対話は通常と変わらない。あなたが起動した シェル(または、指定したプログラム)を終了すると autoexpectは新しいスクリ プトを生成する。デフォルトでは"script.exp"ファイルに書き込まれる。 -fフ ラグを使うとファイル名を指定することができる。 次は"ftp ftp.cme.nist.gov"を実行し、結果のExpectスクリプトを "nist"ファ イルへ格納する例である。 % autoexpect -f nist ftp ftp.cme.nist.gov autoexpect が生成するスクリプトは動作が保証されている訳ではないという点 を理解しておくことが重要である。なぜならば、確かな事柄や時々間違うこ と を 推測しなければならないのだから。しかしながら、通常はこれらの問題を特 定し解決することはとても簡単である。 典型的な問題点は: · タイミングの問題。驚くほど多くのプログ ラ ム(rn, ksh, zsh, telnet, 等)やデバイス(例えばモデム) は、プロンプトの後の早す ぎるキー入力を無視する。もし特定の場所でスクリプトが切れてし まう場合は、先の送信の直前に短いスリープの追加を試みよ。 生成されたスクリプトの先頭近くにある"force_conservative"変数 を有効にすることにより、この働きを全体にわたって強制的に行う ことができる。この"conservative"モードでは、各々の文字送信の 前に自動的に短いポーズ(0.1秒)を入れる。全てのプログラムに 対 してこの方法は有効である。 このconservativeモードは、スクリプトの実行がどれほど早いのか は気にせず、ただタイミングの問題か否かを手っ取り早く確かめた い のなら便利である。 -cフラグを付けて実行すると同等のモード を強制することができる。 幸運にも、このようなタイミングの場所は稀で あ る 。 例 え ば 、telnetはエスケープシーケンスを入力した後のみ文字列を無視す る。モデムは初回接続直後に文字列を無視するだけである。また少 数だがこの働きを無効にするスイッチを持つプログラムもある。例 えば、rnの-Tフラグはこの働きを無効にする。 次は、conservativeモードで実行する例である。 autoexpect -c -Cフラグはconservativeモードを切り換えるためのキーを定義する 。次は、^Lを切り換えキーと定義し(non-conservativeモードで)実 行する例である。 (注: ^Lはコントロール+Lを示す) autoexpect -C ^L 次は、^Lを切り換えキーと定義しconservativeモードで実行する例 である。 autoexpect -c -C ^L · エコーの問題。多くのプログラムが文字をエコーする。例えば、シ ェルに対して "more"とタイプすると、autoexpectには以下のよ う に見える: you typed ’m’, computer typed ’m’, you typed ’o’, computer typed ’o’, you typed ’r’, computer typed ’r’, ... そのプログラムに対する特有の知識が無いと、エコーされた文字を 待ってから、次の文字をタイプしているのかどうかを知ることは困 難 である。 autoexpectは、文字列がエコーされていると見なすと 、元々の対話手順のように細切れに対話するのではなく、グループ として全てを一度に送信できると判断する。このためスクリプトが 読み易くなる。しかし、本当にエコーを待ってから入力しなければ ならない場合には、間違った動作となることが考えられる。 · 変化の問題。 autoexpectは対話で生じたすべての文字をスクリプ ト内に記録する。この事は、どの文字が重要でどの文字は置き換え られるかを判断できるため、好ましいことである。 しかし一方では、実行する度に異なる出力を生じるコマンドを使う 場合、生成されたスクリプトは正しく動作しないかもしれない。例 え ば 、date コ マ ン ドは常に異なる出力を生成する。そのため 、autoexpect実行中にdateコマンドを使うと、生成したスクリプト を働かせるためには間違い無く修正が必要になるだろう。 -p フ ラグは、autoexpectをpromptモードにする。このモードでは 、autoexpectはプログラムの出力する最終行(普通はプロン プ ト) だけを記録する。このモードは、上述のdateコマンドの問題や他の ほとんどの変化の問題を扱うことができる。 次は、promptモードで実行する例である。 autoexpect -p -Pフラグはpromptモードを切り換えるためのキーを定義する。次は 、^Pを切り換えキーと定義し(non-promptモードで)実行する例であ る。 (注: ^Pはコントロール+Pを示す) autoexpect -P ^P 次は、^Pを切り換えキーと定義しpromptモードで実行する例である 。 autoexpect -p -P ^P 他のフラグ -quiet フラグは、autoexpectのメッセージ出力を非表示にする。 -Q フラグは、引用文字を定義する。引用文字は、切り替えキーとして使われる ためautoexpectが別の意味に取ってしまう文字を入力するために使うことが で きる。 次 は、引用文字と一緒に複数のフラグを定義する例である。引用文字は、切り 替えキーを文字通り入力する方法として提供される。 autoexpect -P ^P -C ^L -Q ^Q 様式(STYLE) Expectプログラムのための様式があるか否 か 分 か ら な い が 、 明 ら か にautoexpect はどのような様式のモデルにも縛られるべきではない。例えば、 コンピュータ生成スクリプト用に意図された Expectプログ ラ ム の 特 徴 を autoexpect は利用している。だから、autoexpectによって生成されたかのよう なスクリプトを忠実に記述してみてはならない。 しかし一方では、autoexpectのスクリプトは価値のある事を示している。例 え ば 、autoexpectを通して実行することにより、 Tclスクリプトの中で使用する 目的では、どのように文字列は引用されなければならないかを簡単に知るこ と ができる。 関連項目 "Exploring Expect: A Tcl-Based Toolkit for Automating Interactive Pro- grams" by Don Libes, O’Reilly and Associates, January 1995. 著者 Don Libes, National Institute of Standards and Technology expect と autoexpect は、パブリックドメインである。これらのプログラムあ るいは一部が使われたなら、 NISTと著者への謝辞を述べてもらいたい。 30 June 1995 AUTOEXPECT(1)
Copyright(C) linux-cmd.com All Rights Reserved. Author Takayuki Yukawa