aboutsummaryrefslogtreecommitdiff
path: root/ja_JP.eucJP/man/man8/chat.8
blob: 5ba8d3255e7daf76af03b2e1267f475aa77c70dd (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
.\" -*- nroff -*-
.\" manual page [] for chat 1.8
.\" %Id: chat.8,v 1.12 1998/06/23 21:58:41 peter Exp %
.\" jpman %Id: chat.8,v 1.3 1997/08/31 14:02:42 horikawa Stab %
.\" SH section heading
.\" SS subsection heading
.\" LP paragraph
.\" IP indented paragraph
.\" TP hanging label
.TH CHAT 8 "27 Sep 1997" "Chat Version 1.17"
.SH 名称
chat \- モデム接続の確立を自動化するスクリプト言語
.SH 書式
.B chat
[
.I options
]
.I script
.SH 解説
.LP
\fIchat\fR プログラムはコンピュータとモデムの間のメッセージ交換を制御します。
このコマンドの主な目的は、Point-to-Point Protocol デーモン (\fIpppd\fR) と
リモートの \fIpppd\fR プロセスの間の接続を確立することです。
.SH オプション
.TP
.B -f \fI<chat file>
チャットスクリプトを \fIchat file\fR から読み込みます。このオプションと
script パラメータとは、互いに排他の関係にあります。
chat コマンドを実行するユーザは、このファイルのリードアクセス権を
持っていなければなりません。このファイルの中では、文字列の区切りとして
スペースとタブを使うことができます。
.TP
.B -t \fI<timeout>
文字列の受信待ちのタイムアウトを指定します。もし、タイムリミットまでに
指定された文字列を受信できなかった場合には、応答文字列の送信をおこないません。
この時、かわりの応答文字列が指定されていれば それが送信され、
指定されていなければ スクリプトの実行が失敗します。
スクリプトの実行が失敗すると、\fIchat\fR プログラムは
0 以外のエラーコードを返して終了します。
.TP
.B -r \fI<report file>
レポート文字列を出力するファイルを指定します。
キーワード \fIREPORT\fR を用いると、結果の文字列がこのファイルに
出力されます。このオプションを指定せずに \fIREPORT\fR キーワードを
使用すると、レポート文字列は \fIstderr\fR に出力されます。
.TP
.B -e
エコーオプションを有効にして開始します。
\fIchat\fR スクリプトの特定の場所において
\fIECHO\fR キーワードにて
エコーの有効および無効を切り替えることができます。
エコーが有効にされると、モデムからの出力は全て \fIstderr\fR へエコーされます。
.TP
.B -v
\fIchat\fR スクリプトを冗長モードで実行します。
これを指定すると、\fIchat\fR プログラムは、チャットスクリプトの実行状態、
モデムから受信した全てのテキスト、
モデムに送った全てのテキストのログをとります。
デフォルトでは
.IR syslogd (8)
を介して取得します。ログの方法は -S および -s のフラグで変更できます。
冗長トレースのログとりは \fIlocal2\fR ファシリティのレベル \fIinfo\fR 
でおこなわれ、エラーについてはレベル \fIerr\fR が使われます。
.TP
.B -V
\fIchat\fR スクリプトを標準エラー出力冗長モードにて実行するように要求します。
\fIchat\fR プログラムは、
モデムから受信する全てのテキストおよびモデムへ送信する全てのテキストを
標準エラー出力デバイスへログします。
chat もしくは pppd プログラムを動作させている場所では、
このデバイスは通常ローカルのコンソールです。
.TP
.B -s
標準エラー出力を使用します。'-v' による全ログメッセージ
および全エラーメッセージを標準エラー出力へ送られます。
.TP
.B -S
.IR syslog (3)
を使用しません。デフォルトではエラーメッセージは
.IR syslog (3)
へ送られます。-S を使用すると '-v' によるログおよびエラーメッセージは
.IR syslog (3)
へは送られなくなります。
.TP
.B -T \fI<phone number>
送信文字列において \\T 置換メタ文字を置き換える任意の文字列を渡します。
通常は電話番号です。
.TP
.B -U \fI<phone number 2>
送信文字列において \\U 置換メタ文字を置き換える第 2 文字列を渡します。
通常は電話番号です。
2 つの番号を要する ISDN ターミナルアダプタでタイアルする場合に有用です。
.TP
.B script
\fI-f\fR オプションのファイルでスクリプトが指定されていなければ、
\fIchat\fR プログラムに対するパラメータ文字列が
スクリプトとして読み込まれます。
.SH チャットスクリプト
.LP
\fIchat\fR スクリプトには通信の手順を定義します。
.LP
スクリプトは一つまたはそれ以上の「受信待ち-送信」文字列の組からなり、
それぞれは空白で区切られています。
オプションとして「副受信待ち-副送信」文字列の組を追加することもでき、
その場合には以下の例のようにダッシュで区切ります:
.IP
ogin:-BREAK-ogin: ppp ssword: hello2u2
.LP
これにより、\fIchat\fR プログラムは文字列 "ogin:" の受信待ちをおこないます。
もしもタイムアウトする前にログインプロンプトを受信できなければ、
リモートホストにブレーク信号を送信し、それから文字列 "ogin:" を受信待ちします。
もしも最初の "ogin:" が受信できていれば、ブレーク信号は送信されません。
.LP
一旦ログインプロンプトを受信すると、\fIchat\fR プログラムは文字列 ppp を
送信して、プロンプト "ssword:" の受信を待ちます。 パスワードプロンプトを
受信すると、chat プログラムはパスワード hello2u2 を送信します。
.LP
応答文字列に続いて、通常はキャリッジリターン文字が送られます。
「受信待ち」文字列中では、\\r 文字シーケンスで明示的に指定しないかぎり、
キャリッジリターンは文字列に含まれません。
.LP
目的の文字列を識別するのに必要な部分だけを受信待ち文字列に
指定するようにするべきです。
なぜなら、受信待ち文字列は通常ディスクファイルに記録されるため、
動的に変化する情報を含むことができないからです。
一般には、時刻を表す文字列やネットワーク ID 文字列その他の
変化するデータの塊を受信待ちさせることはできません。
.LP
通信の初期段階では、文字が化けて受信される場合があります。
この場合にも正しく認識ができるように、
文字列 "login:" ではなく "ogin:" を待つようにします。
仮に最初の "l" という文字が化けて受信されたとしますと、
リモートシステムが "login:" を送信したとしても、
その文字列は認識されないことになります。
このため、スクリプトでは "login:" ではなく "ogin:" を、
"password:" ではなく "ssword:" を待つようにします。
.LP
非常に単純なスクリプトは、以下のようになるでしょう:
.IP
ogin: ppp ssword: hello2u2
.LP
言いかえると、....ogin: を受信待ちして ppp を送信し、...ssword: を
受信待ちして hello2u2 を送信するということになります。
.LP
現実問題としては、単純なスクリプトが使われることはほとんどないでしょう。
少なくとも、最初の受信待ち文字列が受信できなかった場合に、
副受信待ち文字列を実行するようにするべきでしょう。
たとえば、以下のスクリプトを考えてみます:
.IP
ogin:--ogin: ppp ssword: hello2u2
.LP
これは以前に使った単純なものよりも良いスクリプトでしょう。
以前のものと同様に login: プロンプトを待ちますが、もし受信できなかった場合には
リターンを一つ送ってから再び login: が送られてくるのを待ちます。
最初のログインプロンプトがラインノイズによって化けたとしても、
空行が送られることで、通常はもう一度ログインプロンプトが送信されます。
.SH コメント
コメントを chat スクリプト中に埋め込むことが可能です。
コメントは \fB#\fR (ハッシュ) 文字をカラム 1 から開始する行です。
このようなコメント行は chat プログラムは単に無視します。
「受信待ち」文字列の最初の文字が `#' 文字の場合、
「受信待ち」文字列をクォートする必要があります。
文字 # (ハッシュ)から始まるプロンプトを待ちたい場合には、
以下のように書かねばならないでしょう:
.IP
# Now wait for the prompt and send logout string
.br
\'# ' logout
.LP

.SH 中断文字列
多くのモデムはダイアルの結果を文字列としてレポートします。
これらの文字列は \fBCONNECTED\fR だったり、\fBNO CARRIER\fR や \fBBUSY\fR
だったりするでしょう。
モデムが相手との接続に失敗した場合には、スクリプトを終了させたいと
思うことがよくあるでしょう。
問題は、どの文字列を次に受信するかということを、
スクリプトが正確に知ることはできないということです。
ある時には \fBBUSY\fR を受信するかもしれませんが、
次には \fBNO CARRIER\fR を受信するかもしれません。
.LP
これらの「中断」文字列は、\fIABORT\fR シーケンスにより
スクリプト中に指定することができます。
それは、以下の例のようにスクリプトに指定します:
.IP
ABORT BUSY ABORT 'NO CARRIER' '' ATZ OK ATDT5551212 CONNECT
.LP
このシーケンスは受信待ちをおこないません。それから文字列 ATZ を送信します。
受信待ち文字列は \fIOK\fR です。
\fIOK\fR を受信すると、電話をかけるために文字列 ATDT5551212 を送信します。
受信待ち文字列は \fICONNECT\fR です。
文字列 \fICONNECT\fR を受信すると、スクリプトの残りが実行されます。
一方、モデムが話中を検出すると、文字列 \fIBUSY\fR が送られて
中断文字列への一致が起こります。
この一致が起きたことにより、スクリプトは失敗します。
もしも文字列 \fINO CARRIER\fR を受信すると、それは同じ理由で中断されます。
どちらの文字列が受信されても、\fIchat\fR スクリプトは終了します。
.SH CLR_ABORT 文字列
このシーケンスは以前に設定した \fBABORT\fR 文字列をクリアします。
\fBABORT\fR 文字列は規定サイズ(コンパイル時に決定)の配列に保持されます;
\fBCLR_ABORT\fR はクリアされたエントリの領域を再要求し、
新たな文字列をそこに格納できるようにします。
.SH SAY 文字列
\fBSAY\fR ディレクティブにて、
script が標準エラー出力を介してユーザ端末ヘ文字列を送ることができます。
\fBchat\fR が pppd から起動される場合、
pppd はデーモンとして実行され(制御端末から切離され)、
標準エラー出力は通常
/etc/ppp/connect-errors
へとリダイレクトされます。
.LP
\fBSAY\fR 文字列は、シングルクォートもしくはダブルクォートにて
括る必要があります。
出力中にキャリッジリターンおよびラインフィードが必要な場合、
明示的に文字列中に含める必要があります。
.LP
SAY 文字列を使用して script の進捗状況メッセージを表示することで、'ECHO
OFF'
しつつもユーザになにが起っているのか示すことが可能です。
例を示します:
.IP
ABORT BUSY 
.br
ECHO OFF 
.br
SAY "Dialling your ISP...\\n" 
.br
\'' ATDT5551212 
.br
TIMEOUT 120
.br
SAY "Waiting up to 2 minutes for connection ... "
.br
CONNECT '' 
.br
SAY "Connected, now logging in ...\n"
.br
ogin: account
.br
ssword: pass
.br
$ \c
SAY "Logged in OK ...\n"
\fIetc ...\fR
.LP
このシーケンスは SAY 文字列のみユーザに示し、script の詳細は隠します。
例えば、上記 script を実行した場合、ユーザが見るのは以下です:
.IP
Dialling your ISP...
.br
Waiting up to 2 minutes for connection ... Connected, now logging in ...
.br
Logged in OK ...
.LP

.SH レポート文字列
\fBレポート\fR 文字列は ABORT 文字列に似ています。
違うのは、その文字列自身とキャリッジリターン等の
次の制御文字までの
全ての文字がレポートファイルに書かれるということです。
.LP
レポート文字列はモデムのコネクト文字列の転送レートと
chat ユーザへのリターン値を切りわけるために使えます。
レポート文字列ロジックの分析は、受信待ち文字列の検索などの
他の文字列処理と同時におこなわれます。
レポート文字列と中断文字列に同じ文字列を使用することも可能ですが、
おそらくあまり使い道がないでしょう。
.LP
レポート文字列はプログラムの終了コードに影響を及ぼしません。
.LP
これらの「レポート」文字列は、\fIREPORT\fR シーケンスにより
スクリプト中に指定することができます。
それは、以下の例のようにスクリプトに指定します:
.IP
REPORT CONNECT ABORT BUSY '' ATDT5551212 CONNECT '' ogin: account
.LP
このシーケンスは受信待ちをおこなわず、文字列 ATDT5551212 を送信して
電話をかけます。受信待ち文字列は \fICONNECT\fR です。
文字列 \fICONNECT\fR を受信すると、スクリプトの残りが実行されます。
さらに、文字列 "CONNECT" と、それに続く接続レートなどの
任意の文字がレポートファイルに記録されます。
.\" 原文では expect-file となっているが、report-file の間違いと思われる。
.\" send-pr する予定。
.\" 2.2.2R 対象(1997/06/04) Saeki Takashi <saeki@ba2.so-net.or.jp>
.SH CLR_REPORT 文字列
このシーケンスを使用して、以前に設定した \fBREPORT\fR 文字列をクリア
できます。
\fBREPORT\fR 文字列は規定サイズ(コンパイル時に決定)の配列に保持されます;
\fBCLR_REPORT\fR はクリアされたエントリの領域を再要求し、
新たな文字列をそこに格納できるようにします。
.SH エコー
エコーオプションはモデムからの出力を \fIstderr\fR へエコーするか否か
を制御します。
このオプションを \fI-e\fR オプションにて設定することができますし、
\fIECHO\fR キーワードにて制御することもできます。
「受信待ち-送信」文字列の組 \fIECHO\fR \fION\fR はエコーを有効にし、
\fIECHO\fR \fIOFF\fR は無効にします。
このキーワードを使用してどの会話を見せるかを選択可能です。
例えば以下の script では:
.IP
ABORT   'BUSY'
.br
ABORT   'NO CARRIER'
.br
''      ATZ
.br
OK\\r\\n  ATD1234567
.br
\\r\\n    \\c
.br
ECHO    ON
.br
CONNECT \\c
.br
ogin:   account
.LP
モデム設定結果およびダイヤル結果は見せませんが、
\fICONNECT\fR (もしくは \fIBUSY\fR) メッセージ語は全てをエコーします。
.SH 回線切断
HANGUP オプションはモデムの回線切断をエラーと扱うか否かを制御します。
このオプションは、
システムにダイヤル後に回線切断しコールバックする script 中で有効です。
HANGUP オプションは \fBON\fR もしくは \fBOFF\fR にできます。
.br
HANGUP を OFF に設定しモデムを回線切断
(つまりコールバックシステムへの最初のログイン)すると、\fBchat\fR は
script の実行を続けます
(つまり呼び出しと二度目のログインプロンプトを待ちます)。
呼び出しにて接続後すぐに、\fBHANGUP ON\fR ディレクティブを使用して
通常の回線切断シグナルの動作を戻す必要があります。
(簡単な) script 例を示します:
.IP
ABORT   'BUSY'
.br
''      ATZ
.br
OK\\r\\n  ATD1234567
.br
\\r\\n    \\c
.br
CONNECT \\c
.br
\'Callback login:' call_back_ID
.br
HANGUP OFF
.br
ABORT "Bad Login"
.br
\'Callback Password:' Call_back_password
.br
TIMEOUT 120
.br
CONNECT \\c
.br
HANGUP ON
.br
ABORT "NO CARRIER"
.br
ogin:--BREAK--ogin: real_account
.br
\fIetc ...\fR
.LP
.SH タイムアウト
タイムアウトの初期値は 45 秒です。これは \fB-t\fR パラメータにより
変更することができます。
.LP
次に受信待ちする文字列のタイムアウト値を変更するには、以下のようにします:
.IP
ATZ OK ATDT5551212 CONNECT TIMEOUT 10 ogin:--ogin: TIMEOUT 5 assword: hello2u2
.LP
これは login: プロンプトを受信待ちする際のタイムアウトを 10 秒に変更します。
さらに password プロンプトを受信待ちする際にはタイムアウトを 5 秒に変更します。
.LP
一旦タイムアウト値が変更されると、次に変更されるまでは
そのままになります。
.SH EOT の送信
チャットプログラムは特殊な応答文字列 \fIEOT\fR により、
リモート側へ EOT 文字を送信します。
通常、これはファイル終了を表す文字です。
EOT に続けてリターン文字が送られることはありません。
.PR
\fI^D\fR シーケンスを使って EOT を送信文字列に埋め込むことができます。
.SH ブレークの生成
特殊な応答文字列 \fIBREAK\fR により、ブレーク信号が送られます。
ブレークは送信側では特殊な信号として扱われます。
受信側では通常、転送レートの変更要求として処理されます。
これにより、正常に login プロンプトを受信できるまで
ブレーク信号を送ることで、リモート側がサポートしている転送レートを
順次切替えさせることができます。
.PR
\fI\\K\fR シーケンスを使ってブレーク信号を送信文字列に埋め込むことができます。
.SH エスケープシーケンス
受信待ち文字列と応答文字列には、エスケープシーケンスを指定することができます。
応答文字列では、全てのエスケープシーケンスが使えます。
受信待ち文字列では、ほとんどのエスケープシーケンスが使えます。
受信待ち文字列では使えないエスケープシーケンスについては、
説明文中にそのことが書かれています。
.TP
.B ''
空文字列を受信待ちしたり、送信したりします。
もし、空文字列を送信しようとすると、それはリターン文字を送ることになります。
このシーケンスはアポストロフィ文字またはクォート文字のペアの
どちらでもかまいません。
.TP
.B \\\\b
バックスペース文字を表します。
.TP
.B \\\\c
応答文字列の末尾の改行を抑制します。
これは末尾に改行文字のつかない文字列を送る唯一の方法です。
これは送信文字列の最後に置かれなければいけません。
たとえば、文字列 hello\\c は単に h, e, l, l, o という文字だけを送ります。
.I (受信待ち文字列では使えません)
.TP
.B \\\\d
1 秒のディレイです。プログラムは 1 秒のディレイのために sleep(1) を使います。
.I (受信待ち文字列では使えません)
.TP
.B \\\\K
ブレーク信号を挿入します。
.I (受信待ち文字列では使えません)
.TP
.B \\\\n
改行文字を送信します。
.TP
.B \\\\N
空 (null) 文字を送信します。\\0 でも同じシーケンスを表すことができます。
.I (受信待ち文字列では使えません)
.TP
.B \\\\p
1 秒以下のポーズです。ディレイ時間は 1/10 秒です。
.I (受信待ち文字列では使えません)
.TP
.B \\\\q
.IR syslogd (8)
への文字列出力を抑止します。
かわりに文字列 ?????? がログに出力されます。
.I (受信待ち文字列では使えません)
.TP
.B \\\\r
キャリッジリターン文字を送信または受信待ちします。
.TP
.B \\\\s
文字列中のスペース文字を表します。
これはスペースを含む文字列をクォートしたくない場合に使います。
シーケンス 'HI TIM' と HI\\sTIM は等価です。
.TP
.B \\\\t
タブ文字を送信または受信待ちします。
.TP
.B \\\\\\\\
バックスラッシュ文字を送信または受信待ちします。
.TP
.B \\\\ddd
8 進数 (ddd) を一つの ASCII 文字に変換し、その文字を送信します。
.I (受信待ち文字列では使えない文字がいくつかあります)
.TP
.B \^^C
C で表現される制御文字に置きかえられます。
例えば、文字 DC1 (17) は \^^Q で表されます。
.I (受信待ち文字列では使えない文字がいくつかあります)
.SH 終了コード
\fIchat\fR プログラムは以下の終了コードを返します。
.TP
.B 0
プログラムは正常終了しました。これは、スクリプトがエラーを起こさずに
実行されて、正常に終了したことを示します。
.TP
.B 1
一つまたはそれ以上のパラメータが不正であるか、受信待ち文字列が
内部バッファよりも大きすぎます。これはプログラムが正しく
実行されなかったことを示します。
.TP
.B 2
プログラムの実行中にエラーが発生しました。これは、何らかの理由で
リードまたはライトの操作が失敗したか、chat が SIGINT のような
シグナルを受信したためでしょう。
.TP
.B 3
「-副送信」文字列のない\fI受信待ち\fR文字列があり、タイムアウトイベントが
発生しました。これは、スクリプトが正しくプログラムされていないか、
予期しないイベントが発生して受信待ち文字列を見つけられなかったためでしょう。
.TP
.B 4
\fIABORT\fR 条件としてマークされた 1 番目の文字列を検出しました。
.TP
.B 5
\fIABORT\fR 条件としてマークされた 2 番目の文字列を検出しました。
.TP
.B 6
\fIABORT\fR 条件としてマークされた 3 番目の文字列を検出しました。
.TP
.B 7
\fIABORT\fR 条件としてマークされた 4 番目の文字列を検出しました。
.TP
.B ...
その他の終了コードも、\fIABORT\fR 条件としてマークされた文字列を
検出したことを示します。
.LP
終了コードを使うと、どのイベントによりスクリプトが終了したのかを
判断することができます。
つまり、"NO DIAL TONE" を受信したのか "BUSY" を受信したのかを
識別することができるということです。
最初のイベント (BUSY) ならばリトライする価値がありますが、
二つ目のイベント (NO DIAL TONE) だと、
おそらくリトライしてもそれがうまくいく可能性は低いでしょう。
.SH 関連項目
UUCP のドキュメントからも、\fIchat\fR スクリプトに関する
追加情報が得られるでしょう。
\fIchat\fR スクリプトは \fIuucico\fR プログラムで使われる
スクリプトによって提示されたアイデアを基にしています。
.LP
uucico(1), uucp(1), syslog(3), syslogd(8).
.SH 著作権
\fIchat\fR プログラムは、パブリックドメインのソフトウェアです。
これは GNU のパブリックライセンス (一般公有使用許諾) とは異なります。
このプログラムを分割する場合には、その両方を管理するようにしてください。
.\" 原文は The \fIchat\fR program is in public domain. This is not
.\" the GNU public license. If it breaks then you get to keep both pieces.
.\" 最後の文章にはあまり自信がありません。(^_^;;
.\" 2.2.2R 対象(1997/06/26) Saeki Takashi <saeki@ba2.so-net.or.jp>