総合手引 | セクション 8 | English | オプション |
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 プログラムは、 モデムから受信する全てのテキストおよびモデムへ送信する全てのテキストを 標準エラー出力デバイスへログします。 chat もしくは pppd プログラムを動作させている場所では、 このデバイスは通常ローカルのコンソールです。 |
-s | 標準エラー出力を使用します。'-v' による全ログメッセージ および全エラーメッセージを標準エラー出力へ送られます。 |
-S | syslog(3) を使用しません。デフォルトではエラーメッセージは syslog(3) へ送られます。-S を使用すると '-v' によるログおよびエラーメッセージは syslog(3) へは送られなくなります。 |
-T <phone number> | |
送信文字列において \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:" を、 "password:" ではなく "ssword:" を待つようにします。 | |
非常に単純なスクリプトは、以下のようになるでしょう: | |
ogin: ppp ssword: hello2u2 | |
言いかえると、....ogin: を受信待ちして ppp を送信し、...ssword: を 受信待ちして hello2u2 を送信するということになります。 | |
現実問題としては、単純なスクリプトが使われることはほとんどないでしょう。 少なくとも、最初の受信待ち文字列が受信できなかった場合に、 副受信待ち文字列を実行するようにするべきでしょう。 たとえば、以下のスクリプトを考えてみます: | |
ogin:--ogin: ppp ssword: hello2u2 | |
# Now wait for the prompt and send logout string
amp;'# ' logout | |
これらの「中断」文字列は、ABORT シーケンスにより スクリプト中に指定することができます。 それは、以下の例のようにスクリプトに指定します:
ABORT BUSY ABORT 'NO CARRIER' '' ATZ OK ATDT5551212 CONNECT | |
SAY 文字列は、シングルクォートもしくはダブルクォートにて 括る必要があります。 出力中にキャリッジリターンおよびラインフィードが必要な場合、 明示的に文字列中に含める必要があります。
SAY 文字列を使用して script の進捗状況メッセージを表示することで、'ECHO OFF' しつつもユーザになにが起っているのか示すことが可能です。 例を示します:
ABORT BUSY
ECHO OFF SAY "Dialling your ISP... amp;'' ATDT5551212 TIMEOUT 120 SAY "Waiting up to 2 minutes for connection ... " CONNECT '' SAY "Connected, now logging in ... ogin: account ssword: pass $ SAY "Logged in OK ... etc ... | |
このシーケンスは SAY 文字列のみユーザに示し、script の詳細は隠します。 例えば、上記 script を実行した場合、ユーザが見るのは以下です: | |
Dialling your ISP...
Waiting up to 2 minutes for connection ... Connected, now logging in ... Logged in OK ... | |
レポート文字列はモデムのコネクト文字列の転送レートと chat ユーザへのリターン値を切りわけるために使えます。 レポート文字列ロジックの分析は、受信待ち文字列の検索などの 他の文字列処理と同時におこなわれます。 レポート文字列と中断文字列に同じ文字列を使用することも可能ですが、 おそらくあまり使い道がないでしょう。
レポート文字列はプログラムの終了コードに影響を及ぼしません。
これらの「レポート」文字列は、REPORT シーケンスにより スクリプト中に指定することができます。 それは、以下の例のようにスクリプトに指定します:
REPORT CONNECT ABORT BUSY '' ATDT5551212 CONNECT '' ogin: account | |
ABORT 'BUSY'
ABORT 'NO CARRIER' amp;'' ATZ OK\r ATD1234567 \r \c ECHO ON CONNECT \c ogin: account | |
ABORT 'BUSY'
amp;'' ATZ OK\r ATD1234567 \r \c CONNECT \c amp;'Callback login:' call_back_ID HANGUP OFF ABORT "Bad Login" amp;'Callback Password:' Call_back_password TIMEOUT 120 CONNECT \c HANGUP ON ABORT "NO CARRIER" ogin:--BREAK--ogin: real_account etc ... | |
次に受信待ちする文字列のタイムアウト値を変更するには、以下のようにします:
ATZ OK ATDT5551212 CONNECT TIMEOUT 10 ogin:--ogin: TIMEOUT 5 assword: hello2u2 | |
一旦タイムアウト値が変更されると、次に変更されるまでは そのままになります。
^D シーケンスを使って EOT を送信文字列に埋め込むことができます。
\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) への文字列出力を抑止します。 かわりに文字列 ?????? がログに出力されます。 (受信待ち文字列では使えません) |
\\r | キャリッジリターン文字を送信または受信待ちします。 |
\\s | 文字列中のスペース文字を表します。 これはスペースを含む文字列をクォートしたくない場合に使います。 シーケンス 'HI TIM' と HI\sTIM は等価です。 |
\\t | タブ文字を送信または受信待ちします。 |
\\\\ | バックスラッシュ文字を送信または受信待ちします。 |
\\ddd | 8 進数 (ddd) を一つの ASCII 文字に変換し、その文字を送信します。 (受信待ち文字列では使えない文字がいくつかあります) |
^C | C で表現される制御文字に置きかえられます。 例えば、文字 DC1 (17) は ^Q で表されます。 (受信待ち文字列では使えない文字がいくつかあります) |
0 | プログラムは正常終了しました。これは、スクリプトがエラーを起こさずに 実行されて、正常に終了したことを示します。 |
1 | 一つまたはそれ以上のパラメータが不正であるか、受信待ち文字列が 内部バッファよりも大きすぎます。これはプログラムが正しく 実行されなかったことを示します。 |
2 | プログラムの実行中にエラーが発生しました。これは、何らかの理由で リードまたはライトの操作が失敗したか、chat が SIGINT のような シグナルを受信したためでしょう。 |
3 | 「-副送信」文字列のない受信待ち文字列があり、タイムアウトイベントが 発生しました。これは、スクリプトが正しくプログラムされていないか、 予期しないイベントが発生して受信待ち文字列を見つけられなかったためでしょう。 |
4 | ABORT 条件としてマークされた 1 番目の文字列を検出しました。 |
5 | ABORT 条件としてマークされた 2 番目の文字列を検出しました。 |
6 | ABORT 条件としてマークされた 3 番目の文字列を検出しました。 |
7 | ABORT 条件としてマークされた 4 番目の文字列を検出しました。 |
... | その他の終了コードも、ABORT 条件としてマークされた文字列を 検出したことを示します。 |
uucico(1), uucp(1), syslog(3), syslogd(8).
27 Sep 1997 | CHAT (8) | Chat Version 1.17 |
総合手引 | セクション 8 | English | オプション |
このマニュアルページサービスについてのご意見は Ben Bullock にお知らせください。 Privacy policy.