chat(8) FreeBSD 一般コマンドマニュアル

chat

前のページ 上に戻る 次のページ

chat



書式

       chat [ options ] script


解説

       chat  プログラムはコンピュータとモデムの間のメッセージ交換
       を制御します。このコマンドの主 な 目 的 は、Point-to-Point
       Protocol  デーモン (pppd) とリモートの pppd プロセスの間の
       接続を確立することです。


オプション

       -f <chat file>
              チャットスクリプトを chat file から読み込みます。こ
              の オプションと script パラメータとは、互いに排他の
              関係にあります。 chat コマンドを実行するユーザ は、
              こ のファイルのリードアクセス権を持っていなければな
              りません。このファイルの中では、文字列の区切りと し
              てスペースとタブを使うことができます。

       -t <timeout>
              文 字列の受信待ちのタイムアウトを指定します。もし、
              タイムリミットまでに指定された文字列を受信 で き な
              かっ た場合には、応答文字列の送信をおこないません。
              この時、かわりの応答文字列が指定されていれば それが
              送信され、指定されていなければ スクリプトの実行が失
              敗します。スクリプトの実行が失敗すると、chat プログ
              ラムは 0 以外のエラーコードを返して終了します。

       -r <report file>
              レ ポート文字列を出力するファイルを指定します。キー
              ワード REPORT を用いると、結果の文字列がこのファ イ
              ルに出力されます。このオプションを指定せずに REPORT
              キーワードを使用すると、レポート文字列は stderr  に
              出力されます。

       -e      エコーオプションを有効にして開始します。 chat スク
              リプトの特定の場所において ECHO キーワードにてエ コ
              ー の有効および無効を切り替えることができます。エコ
              ーが有効にされると、モデムからの出力は全 て  stderr
              へエコーされます。

       -v     chat スクリプトを冗長モードで実行します。これを指定
              すると、chat プログラムは、チャットスクリプトの実行
              状 態、 モ デムから受信した全てのテキスト、モデムに
              送った全てのテキストのログをとります。デフォルト で
              は  syslogd(8)  を介して取得します。ログの方法は -S
              および -s のフラグで変更できます。冗長トレースの ロ
              グ とりは local2 ファシリティのレベル info でおこな
              われ、エラーについてはレベル err が使われます。

       -V     chat スクリプトを標準エラー出力冗長モードにて実行す
              る ように要求します。 chat プログラムは、モデムから
              受信する全てのテキストおよびモデムへ送信する全て の
              送信文字列において \T 置換メタ文字を置き換える任 意
              の文字列を渡します。通常は電話番号です。

       -U <phone number 2>
              送 信文字列において \U 置換メタ文字を置き換える第 2
              文字列を渡します。通常は電話番号です。 2 つの番号を
              要 する ISDN ターミナルアダプタでタイアルする場合に
              有用です。

       script -f オプションのファイルでスクリプトが指定されていな
              け れば、 chat プログラムに対するパラメータ文字列が
              スクリプトとして読み込まれます。


チャットスクリプト

       chat スクリプトには通信の手順を定義します。

       スクリプトは一つまたはそれ以上の「受信待ち-送信」文字列 の
       組からなり、それぞれは空白で区切られています。オプションと
       して「副受信待ち-副送信」文字列の組を追加することもで き、
       その場合には以下の例のようにダッシュで区切ります:

              ogin:-BREAK-ogin: ppp ssword: hello2u2

       これにより、chat プログラムは文字列 "ogin:" の受信待ちをお
       こないます。もしもタイムアウトする前にログインプロンプトを
       受信できなければ、リモートホストにブレーク信号を送信し、そ
       れから文字列 "ogin:" を受信待ちしま す。 も し も 最 初 の
       "ogin:" が受信できていれば、ブレーク信号は送信されません。

       一旦ログインプロンプトを受信すると、chat プログラムは文 字
       列 ppp を送信して、プロンプト "ssword:" の受信を待ちます。
       パスワードプロンプトを受信すると、chat プログラムはパス ワ
       ード hello2u2 を送信します。

       応答文字列に続いて、通常はキャリッジリターン文字が送られま
       す。「受信待ち」文字列中では、\r 文字シーケンスで明示的 に
       指 定 しないかぎり、キャリッジリターンは文字列に含まれませ
       ん。

       目的の文字列を識別するのに必要な部分だけを受信待ち文字列に
       指定するようにするべきです。なぜなら、受信待ち文字列は通常
       ディスクファイルに記録されるため、動的に変化する情報を含む
       ことができないからです。一般には、時刻を表す文字列やネット
       ワーク ID 文字列その他の変化するデータの塊を受信待ちさせる
       ことはできません。

       通信の初期段階では、文字が化けて受信される場合があります。
       この場合にも正しく認識ができるように、文字列 "login:" では
       なく "ogin:" を待つようにします。仮に最初の "l" という文字
       が化けて受信されたとしますと、リモートシステムが  "login:"
       を 送 信したとしても、その文字列は認識されないことになりま
       す。このため、スクリプトでは "login:" で は な く  "ogin:"

              ogin:--ogin: ppp ssword: hello2u2

       これは以前に使った単純なものよりも良いスクリプトでしょう。
       以前のものと同様に login: プロンプトを待ちますが、もし受信
       できなかった場合にはリターンを一つ送ってから再び login: が
       送られてくるのを待ちます。最初のログインプロンプトがライン
       ノイズによって化けたとしても、空行が送られることで、通常は
       もう一度ログインプロンプトが送信されます。


コメント

       コメントを chat スクリプト中に埋め込むことが可能です。コメ
       ントは # (ハッシュ) 文字をカラム 1 から開始する行です。 こ
       のようなコメント行は chat プログラムは単に無視します。「受
       信待ち」文字列の最初の文字が `#' 文字の場合、「受信待 ち」
       文 字列をクォートする必要があります。文字 # (ハッシュ)から
       始まるプロンプトを待ちたい場合には、以下のように書かねばな
       らないでしょう:

              # Now wait for the prompt and send logout string
              '# ' logout




中断文字列

       多くのモデムはダイヤルの結果を文字列としてレポートします。
       これらの文字列は CONNECTED だったり、NO CARRIERBUSY
       だったりするでしょう。モデムが相手との接続に失敗した場合に
       は、スクリプトを終了させたいと思うことがよくあるでしょう。
       問題は、どの文字列を次に受信するかということを、スクリプト
       が正確に知ることはできないということです。ある時には  BUSY
       を受信するかもしれませんが、次には NO CARRIER を受信するか
       もしれません。

       これらの「中断」文字列は、ABORT シーケンスによりスクリプト
       中に指定することができます。それは、以下の例のようにスクリ
       プトに指定します:

              ABORT BUSY ABORT 'NO CARRIER' '' ATZ OK ATDT5551212
              CONNECT

       こ の シーケンスは受信待ちをおこないません。それから文字列
       ATZ を送信します。受信待ち文字列は OK です。 OK を受信する
       と、 電話をかけるために文字列 ATDT5551212 を送信します。受
       信待ち文字列は CONNECT です。文字列 CONNECT を受信すると、
       スクリプトの残りが実行されます。一方、モデムが話中を検出す
       ると、文字列 BUSY が送られて中断文字列への一致が起こ り ま
       す。この一致が起きたことにより、スクリプトは失敗します。も
       しも文字列 NO CARRIER を受信すると、それは同じ理由で中断さ
       れ ます。どちらの文字列が受信されても、chat スクリプトは終
       了します。

       る必要があります。出力中にキャリッジリターンおよびラ イ ン
       フィードが必要な場合、明示的に文字列中に含める必要がありま
       す。

       SAY 文字列を使用して script の進捗状況メッセージを表示する
       こ とで、'ECHO OFF' しつつもユーザになにが起っているのか示
       すことが可能です。例を示します:

              ABORT BUSY
              ECHO OFF
              SAY "Dialling your ISP...\n"
              '' ATDT5551212
              TIMEOUT 120
              SAY "Waiting up to 2 minutes for connection ... "
              CONNECT ''
              SAY "Connected, now logging in ...\n"
              ogin: account
              ssword: pass
              $ SAY "Logged in OK ...\n" etc ...

       このシーケンスは SAY 文字列のみユーザに示し、script の詳細
       は隠します。例えば、上記 script を実行した場合、ユーザが見
       るのは以下です:

              Dialling your ISP...
              Waiting up to 2 minutes  for  connection  ...  Con-
              nected, now logging in ...
              Logged in OK ...




レポート文字列

       B>レB>ポB>ーB>ト 文字列は ABORT 文字列に似ています。違うのは、その
       文字列自身とキャリッジリターン等の次の制御文字までの全ての
       文字がレポートファイルに書かれるということです。

       レ ポート文字列はモデムのコネクト文字列の転送レートと chat
       ユーザへのリターン値を切りわけるために使えます。レポート文
       字列ロジックの分析は、受信待ち文字列の検索などの他の文字列
       処理と同時におこなわれます。レポート文字列と中断文字列に同
       じ文字列を使用することも可能ですが、おそらくあまり使い道が
       ないでしょう。

       レポート文字列はプログラムの終了コードに影響を及ぼし ま せ
       ん。

       こ れらの「レポート」文字列は、REPORT シーケンスによりスク
       リプト中に指定することができます。それは、以下の例のように
       スクリプトに指定します:

              REPORT CONNECT ABORT BUSY '' ATDT5551212 CONNECT ''
              ogin: account


エコー

       エコーオプションはモデムからの出力を stderr へエコーするか
       否かを制御します。このオプションを -e オプションにて設定す
       ることができますし、 ECHO キーワードにて制御することもでき
       ます。「受信待ち-送信」文字列の組 ECHO ON はエコーを有効に
       し、 ECHO OFF は無効にします。このキーワードを使用してどの
       会話を見せるかを選択可能です。例えば以下の script では:

              ABORT   'BUSY'
              ABORT   'NO CARRIER'
              ''      ATZ
              OK\r\n  ATD1234567
              \r\n    \c
              ECHO    ON
              CONNECT \c
              ogin:   account

       モデム設定結果およびダイヤル結果は見せませんが、 CONNECT (
       もしくは BUSY) メッセージ語は全てをエコーします。


回線切断

       HANGUP オプションはモデムの回線切断をエラーと扱うか否か を
       制御します。このオプションは、システムにダイヤル後に回線切
       断しコールバックする script 中で有効です。 HANGUP オプショ
       ンは ON もしくは OFF にできます。
       HANGUP を OFF に設定しモデムを回線切断 (つまりコールバック
       システムへの最初のログイン)すると、chat は script の実行を
       続けます (つまり呼び出しと二度目のログインプロンプトを待ち
       ます)。呼び出しにて接続後すぐに、HANGUP ON ディレクティ ブ
       を 使 用して通常の回線切断シグナルの動作を戻す必要がありま
       す。 (簡単な) script 例を示します:

              ABORT   'BUSY'
              OK\r\n  ATD1234567
              \r\n    \c
              CONNECT \c
              'Callback login:' call_back_ID
              HANGUP OFF
              ABORT "Bad Login"
              'Callback Password:' Call_back_password
              TIMEOUT 120
              CONNECT \c
              HANGUP ON
              ABORT "NO CARRIER"
              ogin:--BREAK--ogin: real_account
              etc ...



タイムアウト

       タイムアウトの初期値は 45 秒です。これは -t パラメータによ
       り変更することができます。

       チャットプログラムは特殊な応答文字列 EOT により、リモー ト
       側 へ EOT 文字を送信します。通常、これはファイル終了を表す
       文字です。 EOT に続けてリターン文字が送られることはあり ま
       せ ん。 ^D シーケンスを使って EOT を送信文字列に埋め込むこ
       とができます。


ブレークの生成

       特殊な応答文字列 BREAK により、ブレーク信号が送られま す。
       ブレークは送信側では特殊な信号として扱われます。受信側では
       通常、転送レートの変更要求として処理されます。これにより、
       正 常に login プロンプトを受信できるまでブレーク信号を送る
       ことで、リモート側がサポートしている転送レートを順次切り替
       えさせることができます。 \K シーケンスを使ってブレーク信号
       を送信文字列に埋め込むことができます。


エスケープシーケンス

       受信待ち文字列と応答文字列には、エスケープシーケンスを指定
       することができます。応答文字列では、全てのエスケープシーケ
       ンスが使えます。受信待ち文字列では、ほとんどのエスケープシ
       ーケンスが使えます。受信待ち文字列では使えないエスケープシ
       ーケンスについては、説明文中にそのことが書かれています。

       ''     空文字列を受信待ちしたり、送信したりします。も し、
              空 文字列を送信しようとすると、それはリターン文字を
              送ることになります。このシーケンスはアポストロ フィ
              文 字またはクォート文字のペアのどちらでもかまいませ
              ん。

       \b     バックスペース文字を表します。

       \c     応答文字列の末尾の改行を抑制します。これは末尾に 改
              行 文字のつかない文字列を送る唯一の方法です。これは
              送信文字列の最後に置かれなければいけません。たと え
              ば、 文字列 hello\c は単に h, e, l, l, o という文字
              だけを送ります。 (受信待ち文字列では使えません)

       \d     1 秒のディレイです。プログラムは 1 秒のディレイのた
              め に sleep(1) を使います。 (受信待ち文字列では使え
              ません)

       \K     ブレーク信号を挿入します。 (受信待ち文字列では使 え
              ません)

       \n     改行文字を送信します。

       \N     空 (null) 文字を送信します。\0 でも同じシーケンスを
              表すことができます。 (受信待ち文字列では使えません)

       \p     1  秒以下のポーズです。ディレイ時間は 1/10 秒です。
              (受信待ち文字列では使えません)

       \q     syslogd(8) への文字列出力を抑止します。かわりに文字
              を 送信します。 (受信待ち文字列では使えない文字がい
              くつかあります)

       ^C     C で表現される制御文字に置きかえられます。例え ば、
              文 字 DC1 (17) は ^Q で表されます。 (受信待ち文字列
              では使えない文字がいくつかあります)


終了コード

       chat プログラムは以下の終了コードを返します。

       0      プログラムは正常終了しました。これは、スクリプト が
              エ ラーを起こさずに実行されて、正常に終了したことを
              示します。

       1      一つまたはそれ以上のパラメータが不正であるか、受 信
              待 ち文字列が内部バッファよりも大きすぎます。これは
              プログラムが正しく実行されなかったことを示します。

       2      プログラムの実行中にエラーが発生しました。これ は、
              何 ら か の理由でリードまたはライトの操作が失敗した
              か、chat が SIGINT のようなシグナルを受信したためで
              しょう。

       3      「-副送信」文字列のない受信待ち文字列があり、タイム
              アウトイベントが発生しました。これは、スクリプト が
              正 しくプログラムされていないか、予期しないイベント
              が発生して受信待ち文字列を見つけられなかったため で
              しょう。

       4      ABORT 条件としてマークされた 1 番目の文字列を検出し
              ました。

       5      ABORT 条件としてマークされた 2 番目の文字列を検出し
              ました。

       6      ABORT 条件としてマークされた 3 番目の文字列を検出し
              ました。

       7      ABORT 条件としてマークされた 4 番目の文字列を検出し
              ました。

       ...     その他の終了コードも、ABORT 条件としてマークされた
              文字列を検出したことを示します。

       終了コードを使うと、どのイベントによりスクリプトが終了した
       の かを判断することができます。つまり、"NO DIAL TONE" を受
       信したのか "BUSY" を受信したのかを識別することができるとい
       うことです。最初のイベント (BUSY) ならばリトライする価値が
       ありますが、二つ目のイベント (NO DIAL TONE) だと、おそらく
       リトライしてもそれがうまくいく可能性は低いでしょう。


関連項目


Chat Version 1.17          27 Sep 1997                    CHAT(8)

ABELNET VPSサービス