Provided by:
manpages-zh_1.5.1-3_all 
NAME
chat - 與叠C自酉通的指令稿
SYNOPSIS
chat [ options ] script
DESCRIPTION
chat 程式在肽X與叠C之間定義贤ń籕事宜。 它最主要的
目的是用碓邳ccf定的隱形程式 (pppd) 以及遠端的 pppd 程序
之間建立連尽
OPTIONS
-f <chat file>
chat n案讀取 chat 指令稿。這選淼氖褂门c chat 的
令稿⒌互斥(mutually exclusive)。使用者必砭哂写嫒≡
n案的讀取唷T趎案中允許多(multiple lines)設定。
砸钥瞻谆蚴荕向定位(horizontal tab)字元矸指糇执
-t <timeout>
端邮盏钠诖执(expected string)設定逾r限制。
如果在詒間限制萞有接收到宰执脑那麼就不送出回覆 字串(reply
string)。 可以送出一淄(alternate)的回覆
或者如果]有淄ǖ幕馗沧执畉灾噶罡澧失 R皇А 的指令稿使得
chat 程式以一非零的錯誤碼結束。
-r <report file>
Set the file for output of the report strings. If you use the
keyword REPORT, the resulting strings are written to this file.
If this option is not used and you still use REPORT keywords,
the stderr file is used for the report strings.
-e Start with the echo option turned on. Echoing may also be turned
on or off at specific points in the chat script by using the
ECHO keyword. When echoing is enabled, all output from the modem
is echoed to stderr.
-E Enables environment variable substituion within chat scripts
using the standard $xxx syntax.
-v 要求 chat 指令稿以冗長(verbose)模式绦小 這 chat 程
式接下睨⑺心叠C接收的文字以及莩龅淖执涞 SYSLOG 去。The
default is to log through the SYSLOG; the logging method may be
altered with the -S and -s flags.
-V Request that the chat script be executed in a stderr verbose
mode. The chat program will then log all text received from the
modem and the output strings sent to the modem to the stderr
device. This device is usually the local console at the station
running the chat or pppd program.
-s Use stderr. All log messages from '-v' and all error messages
will be sent to stderr.
-S Do not use the SYSLOG. By default, error messages are sent to
the SYSLOG. The use of -S will prevent both log messages from
'-v' and error messages from being sent to the SYSLOG.
-T <phone number>
Pass in an arbitary string, usually a phone number, that will be
substituted for the \T substitution metacharacter in a send
string.
-U <phone number 2>
Pass in a second string, usually a phone number, that will be
substituted for the \U substitution metacharacter in a send
string. This is useful when dialing an ISDN terminal adapter
that requires two numbers.
script script 如果指令稿]有以 -f 選碇付ㄔ趎案裡那麼灾噶罡妣如同
⒌般被包含在 chat 程式裡。
CHAT SCRIPT
chat 脚本定義通舆^程
一指令稿裡包含一或多ㄆ诖方送出(expect-send)ǖ呐洇 字串(pairs of
string),以空白隔開,哂幸贿x裥缘抹期待Ψ 送出之候補(subexpect-
subsend)ㄅ洇字串,以短(dash)隔開。像 下面這例子:
ogin:-BREAK-ogin: ppp ssword: hello2u2
這一行指示 chat 程式期待 "ogin:" 這字串。如果在所分配的
r間^間冉邮蘸入提示失〉脑, 那它就送出一中喑绦(break
sequence)給遠端然後期待 "ogin:" 這字串。 如果第一 "ogin:"
被接收到那麼中喑绦蚓筒箕產生。
一旦它接收到院入提示t chat 程式送出 ppp 這字串然後期 待 "ssword:"
這提示。邮盏矫艽a提示以後,它送出密碼 hello2u2 。
一般在回覆字串後面跟著送出一C(character sequence))壁
ㄆ诖字串裡除非以
矸駎不期待它的出現。
期待程序(expect sequence)只包含辨認字串所需要的資料。因
它一般是Ψ旁诖诺鷑案裡,它不包含子的資印 通常以期待
字串恧找r間字串(time strings), 網路辨識字串(network iden- tification
strings),或是其它子的資料是不被接受的。
榍骹助修正在初始化程序中(initial sequence) 可能魉湾e誤的 字元,所以ふ
"ogin:" 這字串而不是 "login:" 。 開頭的 "l"
字元可能接收錯誤而你永遠找不到宰执 即使它已奖幌到y送出。
因此竟剩噶罡澶找 "ogin:" 而不是 "login:" 以及 "ssword" 而 不是
"password:" 。
一非常何的指令稿看起砜赡芟襁@樱
ogin: ppp ssword: hello2u2
Q句哉f, 期待 ...ogin:, 送出 ppp, 期待 ...ssword:, 再送出 hello2u2 。
在際使用上,何的指令稿是罕业摹W钌僮钌伲 韵鹊淖执甝有
被接收r你要把候補期待(sub-sequences)包括進怼@纾糫 下面這例子:
ogin:--ogin: ppp ssword: hello2u2
這是一比前面所用的何指令稿更好的指令稿。 這ふ蚁嗤 同的 login:
提示,然而, 如果]有接收到的裕 送出一为的 返回程序(return
sequence)K且它接著再次ふ login: 。要是雜 雜友谏w掉第一 login
提示那麼接著送出空韭(empty line)匠 再次產生喝胩崾尽
COMMENTS
Comments can be embedded in the chat script. A comment is a line which
starts with the # (hash) character in column 1. Such comment lines are
just ignored by the chat program. If a '#' character is to be expected
as the first character of the expect sequence, you should quote the
expect string. If you want to wait for a prompt that starts with a #
(hash) character, you would have to write something like this:
# Now wait for the prompt and send logout string
'# ' logout
SENDING DATA FROM A FILE
If the string to send starts with an at sign (@), the rest of the
string is taken to be the name of a file to read to get the string to
send. If the last character of the data read is a newline, it is
removed. The file can be a named pipe (or fifo) instead of a regular
file. This provides a way for chat to communicate with another
program, for example, a program to prompt the user and receive a
password typed in.
ABORT STRINGS
許多叠C以字串砘伢呼叫的 顁。 這些字串可能是 CONNECTED 或是 NO CARRIER
或是 BUSY 。 通常要是叠C連镜竭h端失〉脑 希望結束指令稿。
困難是指令稿不確地知道它可能接收到 哪叠C字串。在某次L詒, 他可能接收到
BUSY 然而下次它可 能接收到 NO CARRIER 。
這些ㄊАㄗ执梢杂 ABORT 程序指定到指令稿中。像是下面這
例子般地到指令稿裡:
ABORT BUSY ABORT 'NO CARRIER' '' ATZ OK ATDT5551212 CONNECT
這程序⒉箕期待什麼;而且接著送出 ATZ 這字串。Υ似诖 回 OK
這字串。邮盏 OK r,字串 ADTD5551212 就進行 芴。期待字串是 CONNECT
。 如果字串 CONNECT 被接收到那麼就
绦兄噶罡迤漯N的部份。然而,要是叠C發現朐忙荆 他送 出 BUSY 這字串。
這使得宰执鲜А字元程序(abort char- acter)。
這指令稿因樗l現一失∽执(abort string)而
失(fail)。如果他接收到的是 NO CARRIER 字串, 它也因橥 的-
因而失 2皇强梢越邮盏阶执褪亲执終結 chat 指令稿。
CLR_ABORT STRINGS
This sequence allows for clearing previously set ABORT strings. ABORT
strings are kept in an array of a pre-determined size (at compilation
time); CLR_ABORT will reclaim the space for cleared entries so that new
strings can use that space.
SAY STRINGS
The SAY directive allows the script to send strings to the user at the
terminal via standard error. If chat is being run by pppd, and pppd is
running as a daemon (detached from its controlling terminal), standard
error will normally be redirected to the file /etc/ppp/connect-errors.
SAY strings must be enclosed in single or double quotes. If carriage
return and line feed are needed in the string to be output, you must
explicitely add them to your string.
The SAY strings could be used to give progress messages in sections of
the script where you want to have 'ECHO OFF' but still let the user
know what is happening. An example is:
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 ...0
ogin: account
ssword: pass
$ SAY "Logged in OK ...0 etc ...
This sequence will only present the SAY strings to the user and all the
details of the script will remain hidden. For example, if the above
script works, the user will see:
Dialling your ISP...
Waiting up to 2 minutes for connection ... Connected, now
logging in ...
Logged in OK ...
REPORT STRINGS
A report string is similar to the ABORT string. The difference is that
the strings, and all characters to the next control character such as a
carriage return, are written to the report file.
The report strings may be used to isolate the transmission rate of the
modem's connect string and return the value to the chat user. The
analysis of the report string logic occurs in conjunction with the
other string processing such as looking for the expect string. The use
of the same string for a report and abort sequence is probably not very
useful, however, it is possible.
The report strings to no change the completion code of the program.
These "report" strings may be specified in the script using the REPORT
sequence. It is written in the script as in the following example:
REPORT CONNECT ABORT BUSY '' ATDT5551212 CONNECT '' ogin:
account
This sequence will expect nothing; and then send the string ATDT5551212
to dial the telephone. The expected string is CONNECT. If the string
CONNECT is received the remainder of the script is executed. In
addition the program will write to the expect-file the string "CONNECT"
plus any characters which follow it such as the connection rate.
CLR_REPORT STRINGS
This sequence allows for clearing previously set REPORT strings.
REPORT strings are kept in an array of a pre-determined size (at
compilation time); CLR_REPORT will reclaim the space for cleared
entries so that new strings can use that space.
ECHO
The echo options controls whether the output from the modem is echoed
to stderr. This option may be set with the -e option, but it can also
be controlled by the ECHO keyword. The "expect-send" pair ECHO ON
enables echoing, and ECHO OFF disables it. With this keyword you can
select which parts of the conversation should be visible. For instance,
with the following script:
ABORT 'BUSY'
ABORT 'NO CARRIER'
''
ATZ
OK\r\n ATD1234567
\r\n \c
ECHO ON
CONNECT \c
ogin: account
all output resulting from modem configuration and dialing is not
visible, but starting with the CONNECT (or BUSY) message, everything
will be echoed.
HANGUP
The HANGUP options control whether a modem hangup should be considered
as an error or not. This option is useful in scripts for dialling
systems which will hang up and call your system back. The HANGUP
options can be ON or OFF.
When HANGUP is set OFF and the modem hangs up (e.g., after the first
stage of logging in to a callback system), chat will continue running
the script (e.g., waiting for the incoming call and second stage login
prompt). As soon as the incoming call is connected, you should use the
HANGUP ON directive to reinstall normal hang up signal behavior. Here
is an (simple) example script:
ABORT 'BUSY'
'' ATZ
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 ...
TIMEOUT
初始的逾r值是 45 秒。這可以用 -t ⒌砑右愿淖。
要ο乱黄诖执淖逾r值的裕梢允褂孟旅孢@例子:
ATZ OK ATDT5551212 CONNECT TIMEOUT 10 ogin:--ogin: TIMEOUT 5
assword: hello2u2
這在期待 "login:" 提示的r候把逾r限制改成 10 秒。 逾r限
制接著在它ふ颐艽a提示r被改成 5 秒。
逾r限制一旦改拙威持續作用直到它再度被改住
SENDING EOT
EOT 這特e的回覆字串指示 chat 程式送出一 EOT 字元到遠
端去。這是一般的n案結束(End-of-file)字元程序。 在 EOT 後面K
不跟著送出一返回字元(return)。
這 EOT 程序可以用 ^D 序列嵌入到送出的字串裡。
a GENERATING BREAK
BREAK 這特e的回覆字串使得一中嗲閞被送出。 這中
是魉投说囊惶厥狻=邮斩艘话悝此的汤硎歉淖鬏率。 它可以 用硌-
hy赃h端可能的鬏率直到你能蚪拥接行У暮入提示。
這中喑绦蚩梢杂 \K 序列嵌入到送出的字串裡。
ESCAPE SEQUENCES
期待以及回覆字串可以包含转义序列。 所有這種程序在回覆字串中都
是合法的。有許多在期待字串中是合法的。 那些在期待程序中o效的 被指出。
'' 期待或送出一空字串(null string) 。如果你送出一空字
串那麼它唼送出一返回字元。這程序可以是一κ÷苑
(apostrophe)或者也可以是引用字元。
\b 代表一退位(backspace)字元。
\c 抑制在回覆字串結尾的新列(newline)字元。 這是送出]有返
回字元尾隨的字串的唯一方法。它必碓谒统鲎执慕Y尾。例
如,這程序 hello
\d 延遲一秒纭T程式使用最長延遲橐幻氲 sleep(1) 。(在
期待字串中o效。)
\K 插入一中啵ㄔ谄诖执衞效。)
\n 送出一新列(newline)或Q行(linefeed)字元。
\N 送出一空字元(null character)。同拥某绦蚩梢杂 代
替。(在期待字串中o效。)
\p 和R恍《蝦間。延遲 1/10 秒。(在期待字串中o效。)
\q 抑制字串往 SYSLOG n案。 ?????? 字串被愉到自己的
空間。(在期待字串中o效。)
\r 魉突蚱诖籆架返回(字元)
\s 代替字串中的空白。這可以用在不钜冒瞻椎淖执畆。'HI TIM'
以及 HI\sTIM 是相同的。
\t 魉突蚱诖欢ㄎ(tab)字元。
\T Send the phone number string as specified with the -T option
(not valid in expect.)
\U Send the phone number 2 string as specified with the -U option
(not valid in expect.)
\\ 魉突蚱诖坏剐本(backslash)字元。
\ddd 诉M位底 (ddd) 折疊(collapse)成我坏 ASCII 字元K
⑵渌统觥#承┳衷谄诖执衞效。)
^C 替Q含有以 C 代表之控制字元的程序。例如,字元 DC1(17) 是以 ^Q
表示。(某些字元在期待字串中o效。)
ENVIRONMENT VARIABLES
Environment variables are available within chat scripts, if the -E
option was specified in the command line. The metacharacter $ is used
to introduce the name of the environment variable to substitute. If the
substition fails, because the requested environment variable is not
set, nothing is replaced for the variable.
TERMINATION CODES
The chat program will terminate with the following completion codes.
0 The normal termination of the program. This indicates that the
script was executed without error to the normal conclusion.
1 One or more of the parameters are invalid or an expect string
was too large for the internal buffers. This indicates that the
program as not properly executed.
2 An error occurred during the execution of the program. This may
be due to a read or write operation failing for some reason or
chat receiving a signal such as SIGINT.
3 A timeout event occurred when there was an expect string without
having a "-subsend" string. This may mean that you did not
program the script correctly for the condition or that some
unexpected event has occurred and the expected string could not
be found.
4 The first string marked as an ABORT condition occurred.
5 The second string marked as an ABORT condition occurred.
6 The third string marked as an ABORT condition occurred.
7 The fourth string marked as an ABORT condition occurred.
... The other termination codes are also strings marked as an ABORT
condition.
Using the termination code, it is possible to determine which event
terminated the script. It is possible to decide if the string "BUSY"
was received from the modem as opposed to "NO DIAL TONE". While the
first event may be retried, the second will probably have little chance
of succeeding during a retry.
SEE ALSO
關於 chat 指令稿的其它資涌梢栽 UUCP 文件裡找到。chat 指令稿 的概念由
uucico 程式所使用的指令稿淼摹
uucico(1), uucp(1)
COPYRIGHT
The chat program is in public domain. This is not the GNU public
license. If it breaks then you get to keep both pieces.
[asdchen <asdchen@pc2.hinet.net>
[1995/09/30
linuxan:
http://cmpp.linuxforum.net