[Prev] [Up] [Next]

Perlの部屋

このページは、自作の perl script を紹介しているページです。 このページの script を利用されることはいっこうに構いませんが、 このページの script を利用したことにより発生した如何なる不具合についても私は責任を持てませんので、このページの script の利用はご自分の責任で行ってください。

chat改めxtalk

UNIX を使っていて、一連のコマンドを何度も何度も叩いている自分に気づいたことはありませんか?

普通、こんな時は shell script 等を使えば一連のコマンドを一つのコマンドとして起動することができるのですが、その一連のコマンドの中に rlogin や telnet 、ftp など別のホストにアクセスするなど対話的な操作がある場合、shell script ではうまく操作できないケースが多々あります。

さらに、rlogin した先に使いたいツール(例えばperlとか)が無いばかりにファイルをローカルに持って来てツールを使わなければならないなど煩わしい思いをすることもあるでしょう。

このような場面で威力を発揮するのが、ここで紹介する xtalk です。

xtalk は人間が画面上で目で見て確認しながら行う決まり切った作業を script 化することのできるツールなのです。 と言っても CUI な世界だけですが、

環境

xtalk は perl5.003_x で開発していました。一応、perl5.004_04 でも動くようです。

使用法

xtalk 自体の使い型は極めて単純です。以下のようにただ xtalk と叩くだけで OK です。
% xtalk
% 
後は、決まり切った作業を行う場面になったところで Ctrl+\ を叩いてください。 すると、以下のようなプロンプトが出るので
*
ここで、定型作業を記述した script を入力してください。
* 定型作業を記述したscript
定型作業を記述した script が終了すると Ctrl+\ を叩いた shell に戻ります。
また、xtalk を終る時は、xtalk 起動直後にプロンプトを出した shell を exit すると勝手に終了します。

なお、xtalk を起動する時に定型作業を記述した script をパラメータとして渡すことによって batch 的な動きをさせることもできます。

おまけ

xtalk 自体はとても簡単なのですが、xtalk から起動する定型作業を記述した script (以下、『定型作業script』と呼びます) を書くには知っておかなければならないお約束があります。

xtalkに関係する入出力関係
xtalk を起動する前 キー入力 --> 標準入力
画面出力 <-- 標準出力
command
xtalkを起動した状態 キー入力 -->
画面出力 <--
xtalk ---------> 標準入力
<--------- 標準出力
command
Ctrl+\ を叩いて
定型作業script を
起動した状態
定型作業
script
fd:4 -->
fd:3 <--
xtalk ---------> 標準入力
<--------- 標準出力
command

まず、定型作業script は Ctrl+\ を叩いた時点でのコマンドと対話します。これが何を意味するかと言うと、shell なら shell の作業を記述する。ftp なら ftp の作業を記述する必要があるということです。まぁ、当然と言えば当然なのですが、shell で Ctrl+\ を叩いたとしても、定型作業script の作業中で ftp を始めたら、ftp の操作を記述する必要があります。

つぎに、定型作業script は Ctrl+\ を叩いた時点のコマンドと本当に対話する必要があります。つまり、本当に人間の変わりをする必要があります。より具体的には、Ctrl+\ を叩いた時点のコマンドの画面出力が定型作業script のファイルディスクリプタ3に、Ctrl+\ を叩いた時点のコマンドの画面入力が定型作業script のファイルディスクリプタ4に結びつけられます。例えば、Ctrl+\ を叩いたのが sh で "ls コマンドを起動して sh のプロンプトを待つ" なら、ファイルディスクリプタ4 に "ls\n" を書き込んで、ファイルディスクリプタ3 から sh のプロンプト文字列 "$" が出力されて来るのを待つ必要があります。

おまけのおまけ

定型作業script を shell script で記述することもできますが、perl script で書くこともできます。xtalk.tar.gz に含まれる Xtalk.pm が定型作業script を perl で書くためのライブラリです。インターフェースは以下の二つのルーチンです。
setprompt
待ち合わせる文字列を設定する
talk
文字列を送り、その結果を返す
xtalk.tar.gz の中には、ついでに、Xtalk.pm を使う定型スクリプトの例としてtst.plを入れて置くので参考にしてください。
Updated: 1998/10/22 knak@ceres.dti.ne.jp