EXPECT(1) EXPECT(1)
NAME
at, drain, expect, pass - dialer scripting tools
SYNOPSIS
dial/at [ -q ] [ -t seconds ] atcommand
dial/expect [ -iq ] [ -t seconds ] goodstring [ badstring...
]
dial/drain
dial/pass [ -q ]
DESCRIPTION
These commands are used to write telephone dialing scripts,
mostly for PPP sessions. They all expect standard input and
output to be connected to a communications device, e.g, a
serial line to a modem. They communicate with the user
using /dev/cons.
At sends atcommand to the modem prefixed with the string at.
It then reads from the modem expecting an AT response. At
will return success if it gets and OK of CONNECT response.
Otherwise it will return the response as an error status.
The options are:
-t set the timeout to seconds. The default is 300.
-q don't write to /dev/cons what is read from standard in.
The default is to copy everything through.
Expect reads standard input looking for one of the strings
given as arguments. Reading the first string causes a suc-
cessul exit status. Reading any of the others causes an
exit status equal to the string. The command also termi-
nates on a timeout. The options are:
-t set the timeout to seconds. The default is 300.
-i ignore case when doing the matches.
-q don't write to /dev/cons what is read from standard in.
The default is to copy everything through.
Pass copies input from /dev/cons to standard output. It
terminates on a newline. The only flag is -q and means the
same as it does for expect.
Drain discards any input waiting on standard input. It is
used to sync up the stream at the start of dialing or after
an error.
EXAMPLE
Page 1 Plan 9 (printed 11/17/25)
EXPECT(1) EXPECT(1)
The following rc script dials out through a Hayes compatible
modem on /dev/eia1 and lets the user type in a user name and
password before starting ppp.
#!/bin/rc
dev=/dev/eia1
telno=18005551212
fn initfn {
dial/drain
echo +++
dial/at zh0
}
fn dialfn {
dial/drain
dial/at dt^$telno
}
{
# set up uart
if( test -e $dev^ctl ){
echo -n b^$baud
echo -n m1 # cts/rts flow control
echo -n q64000 # big buffer
echo -n n1 # nonblocking writes
echo -n r1 # rts on
echo -n d1 # dtr on
echo -n c1 # handup when we lose dcd
} > $dev^ctl
# get the modem's attention
while( ! initfn )
sleep 1
# dial
while( ! dialfn )
sleep 30
if( ! dial/expect -it 60 'username:' ){
echo can''t connect >[1=2]
exit connect
}
dial/pass
if( ! dial/expect -it 60 'password:' ){
echo can''t connect >[1=2]
exit connect
}
dial/pass
if( ! dial/expect -t 60 'ppp or telnet:' ){
echo can''t connect >[1=2]
exit connect
}
echo ppp
Page 2 Plan 9 (printed 11/17/25)
EXPECT(1) EXPECT(1)
dial/expect -t 5 something
echo connected >[1=2]
# start ppp
ip/ppp $primary -f
} < $dev > $dev
FILES
/rc/bin/ipconf/* example dialer scripts for ppp
SOURCE
/sys/src/cmd/dial/*.c
SEE ALSO
ppp(8), telco(4)
Page 3 Plan 9 (printed 11/17/25)