Files in directory jni/expect from the latest check-in of branch trunk
NOTE: ALPHA AND BETA RELEASES OF TCL/TK ARE NOT SUPPORTED!
This is the README file for Expect, a program that performs programmed
dialogue with other interactive programs. It is briefly described by
its man page, expect(1). This directory contains the source and man
page for Expect.
This README file covers Expect 5.38 and up. These versions of Expect
work with Tcl 8.2 and up and Tk 8.2 and up. Significant changes and
other news can be found in the NEWS file.
The Expect home page is: http://expect.nist.gov
The Expect FAQ is: http://expect.nist.gov/FAQ.html
Getting Started - The Preferable Way
A book on Expect is available from O'Reilly with the title "Exploring
Expect: A Tcl-Based Toolkit for Automating Interactive Applications",
The book is filled with detailed examples and explanations, and is a
comprehensive tutorial to Expect. The book also includes a tutorial
on Tcl written specifically for Expect users (so you don't have to
read the Expect papers or the man pages). Exploring Expect is 602
Getting Started - The Hacker Way
While the book is the best way to learn about Expect, it is not
absolutely necessary. There are man pages after all and there are
numerous articles and papers on Expect. All of my own papers are in
the public domain and can be received free. If you are a hacker on a
tight budget, this may appeal to you. Nonetheless, I think you will
find the book pays for itself very quickly. It is much more readable
than the man pages, it includes well-written and explained examples,
and it describes everything in the papers as a coherent whole. The
concepts in the papers actually only make up a small fraction of the
The 1990 USENIX paper (see "Readings" below) is probably the best one
for understanding Expect conceptually. The 1991 Computing Systems and
the LISA IV papers provide a nice mix of examples. The only downside
is, the examples in these papers don't actually work anymore - some
aspects (e.g., syntax) of both Expect and Tcl have changed. The
papers still make interesting reading - just don't study the examples
too closely! Fortunately, most of the examples from the papers also
accompany this distribution - and all of these are up to date.
For all the details, read the man page. It is long but you can get
started just by skimming the sections on the following commands:
spawn (starts a process)
send (sends to a process)
expect (waits for output from a process)
interact (lets you interact with a process)
To print out the Expect man page, invoke your local troff using the
-man macros, such as either of:
ptroff -man expect.man
ditroff -man expect.man
If Expect is installed, you can read the man pages using the "usual"
man commands, such as "man expect". If not installed, view the man
page on your screen by saying something like:
nroff -man expect.man | more
Expect uses Tcl as the underlying language for expressing things such
as procedures, loops, file I/O, and arithmetic expressions. For many
simple scripts, it is not necessary to learn about Tcl. Just by
studying the examples, you will learn enough Tcl to get by. But if
you would like to learn more about Tcl or use it in your own
applications, read the Tcl README file which provides pointers to the
extensive Tcl documentation. Or read Exploring Expect. Chapter 2 of
Exploring Expect is a Tcl tutorial specifically designed for Expect
An interactive debugger is bundled with Expect. The debugger has its
own documentation that comes separately. It is listed in the Readings
below. Again, it is slightly out of date. An up-to-date description
of the debugger appears in Chapter 18 of Exploring Expect. This
chapter also contains additional advice and tips for debugging.
You may get the feeling that the Expect documentation is somewhat
scattered and disorganized. This was true prior to publication of
Exploring Expect. The book contains everything you need to know, all
up-to-date, and with examples of every concept. (The book contains no
references to any of the Expect papers because none are necessary.)
This distribution contains many example scripts. (All of the
substantive examples in the book are included.) They can be found in
the example directory of this distribution. The README file in that
directory briefly describes all of the example scripts. Many of the
more sophisticated examples have man pages of their own.
Other interesting scripts are available separately in the directory
http://expect.nist.gov/scripts/ (ftpable as
ftp://ftp.nist.gov/mel/div826/subject/expect/scripts). (See below for
how to retrieve these.) You are welcome to send me scripts to add to
this directory. A number of Expect scripts are also available in the
Tcl archive, available at ftp://ftp.neosoft.com/pub/tcl.
Readings on Expect
The implementation, philosophy, and design are discussed in "expect:
Curing Those Uncontrollable Fits of Interaction", Proceedings of the
Summer 1990 USENIX Conference, Anaheim, CA, June 11-15, 1990.
Examples and discussion, specifically aimed at system administrators,
are in "Using expect to Automate System Administration Tasks",
Proceedings of the 1990 USENIX Large Systems Administration Conference
(LISA) IV, Colorado Springs, CO, October 17-19, 1990.
A comprehensive paper of example scripts is "expect: Scripts for
Controlling Interactive Programs", Computing Systems, Vol. 4, No. 2,
University of California Press Journals, 1991.
Regression and conformance testing is discussed in "Regression Testing
and Conformance Testing Interactive Programs", Proceedings of the
Summer 1992 USENIX Conference, San Antonio, TX, June 8-12, 1992.
An explanation of some of the more interesting source code to an early
version of Expect is in Chapter 36 ("Expect") of "Obfuscated C and
Other Mysteries", John Wiley & Sons, ISBN 0-471-57805-3, January 1993.
A paper on connecting multiple interactive programs together using
Expect is "Kibitz - Connecting Multiple Interactive Programs
Together", Software - Practice & Experience, Vol. 23, No. 5, May 1993.
The debugger is discussed in "A Debugger for Tcl Applications",
Proceedings of the 1993 Tcl/Tk Workshop, Berkeley, CA, June 10-11,
Using Expect with Tk is described in the paper "X Wrappers for
Non-Graphic Interactive Programs", Proceedings of Xhibition '94, San
Jose, CA, June 20-24, 1994.
Simple techniques to allow secure handling of passwords in background
processes are covered in "Handling Passwords with Security and
Reliability in Background Processes", Proceedings of the 1994 USENIX
LISA VIII Conference, San Diego, CA, September 19-23, 1994.
More publications can be found in the Expect home page (see elsewhere).
How to Get the Latest Version of Expect or the Readings
Expect may be ftp'd as mel/div826/subject/expect/expect.tar.gz from
expect.nist.gov. (Yes, the URL is much shorter:
http://expect.nist.gov/expect.tar.Z) Request email delivery by mailing
to "email@example.com". The contents of the message should be (no
subject line) "send pub/expect/expect.tar.Z".
Once you have retrieved the system, read the INSTALL file. The papers
mentioned above can be retrieved separately (from the same directories
listed above) as:
doc/seminal.ps.Z (USENIX '90 - Intro and Implementation)
doc/sysadm.ps.Z (LISA '90 - System Administration)
doc/scripts.ps.Z (Comp. Systems '91 - Overview of Scripts)
doc/regress.ps.Z (USENIX '92 - Testing)
doc/kibitz.ps.Z (SP&E '93 - Automating Multiple
Interactive Programs Simultaneously)
doc/tcl-debug.ps.Z (Tcl/Tk '93 - Tcl/Tk Debugger)
doc/expectk.ps.Z (Xhibition '94 - Using Expect with Tk)
doc/bgpasswd.ps.Z (LISA '94 - Passwds in Background Procs)
doc/chargraph.ps.Z (SP&E '96 - Testing and Automation
of Character Graphic Applications)
The book "Exploring Expect" is described in more detail earlier in
The book "Obfuscated C and Other Mysteries" is not on-line but is
available in bookstores or directly from the publisher (Wiley).
Overhead transparencies I've used at conferences are also available in
the same way as the papers themselves. The transparencies are sketchy
and not meant for personal education - however if you are familiar
with Expect and just want to give a short talk on it to your
colleagues, you may find the transparencies useful. They vary in
length from 15 to 20 minutes in length. These are:
doc/seminal-talk.ps.Z (USENIX '90 - Intro and Implementation)
doc/sysadm-talk.ps.Z (LISA '90 - System Administration)
doc/regress-talk.ps.Z (USENIX '92 - Testing)
doc/tcl-debug-talk.ps.Z (Tcl/Tk '93 - Tcl/Tk Debugger)
doc/expectk-talk.ps.Z (Xhibition '94 - Expect + Tk = Expectk)
doc/bgpasswd-talk.ps.Z (LISA '94 - Passwords in the Background)
All of the documents are compressed PostScript files and should be
uncompressed and sent to a PostScript printer. The documents are
intended for printing at 8.5"x11" and may fail on some ISO A4
printers. According to Hans Mayer <Hans.Mayer@gmd.de>, you can make
them A4-able by searching for "FMVERSION" and changing the next line
1 1 0 0 612 792 0 1 13 FMDOCUMENT
1 1 0 0 594 841 0 1 13 FMDOCUMENT
Using Expect with and without Tcl and/or Tk.
The usual way of using Expect is as a standalone program with Tcl as
the control language. Since you may already have Tcl, it is available
separately. Tcl may be retrieved as tcl.tar.Z in the same way as
described above for Expect. When new releases of Tcl appear, I will
try to check them out for Expect as soon as possible. If you would
like to get the newest Tcl release without waiting, ftp it from
ftp.scriptics.com (directory pub/tcl).
Expect may also be built using the Tk library, a Tcl interface to the
X Window System. Tk is available in the same way as Tcl.
It is possible to embed the Expect/Tcl core and optionally Tk in your
own C programs. This is described in libexpect(3).
Expect can also be used from a C or C++ program without Tcl. This is
described in libexpect(3). While I consider this library to be easy
to use, the standalone Expect program is much, much easier to use than
working with the C compiler and its usual edit, compile, debug cycle.
Unlike typical programming, most of the debugging isn't getting the C
compiler to accept your programs - rather, it is getting the dialogue
correct. Also, translating scripts from Expect to C is usually not
necessary. For example, the speed of interactive dialogues is
virtually never an issue. So please try 'expect' first. It is a more
appropriate tool than the library for most people.
I do not know of any UNIX systems on which Expect will not run.
Systems which do not support select or poll can use Expect, but
without the ability to run multiple processes simultaneously. I am
willing to work with you to complete a port.
Before sending me changes, please download or verify that you have the
latest version of Expect (see above). Then send me a "diff -c" along
with a suitable English explanation. If your diff involves something
specific to a machine, give me diffs for configure.in as well or give
me a hint about when the diffs should be done so I can write the
configure support myself. Also please include the version of the OS
and whether it is beta, current, recent, or totally out-of-date and
Expect comes with a configure script that provides for an automated
installation. I believe you will find that Expect is very easy to
install. (Tcl and Tk, too.)
For more information, read the INSTALL file.
Support from Don Libes or NIST
Although I can't promise anything in the way of support, I'd be
interested to hear about your experiences using it (good or bad). I'm
also interested in hearing bug reports and suggestions for improvement
even though I can't promise to implement them.
If you send me a bug, fix, or question, include the version of Expect
(as reported by expect -d), version of Tcl, and name and version of
the OS that you are using. Before sending mail, it may be helpful to
verify that your problem still exists in the latest version. You can
check on the current release and whether it addresses your problems by
retrieving the latest HISTORY file (see "History" above).
Awards, love letters, and bug reports may be sent to:
National Institute of Standards and Technology
Bldg 220, Rm A-127
Gaithersburg, MD 20899
I hereby place this software in the public domain. NIST and I would
appreciate credit if this program or parts of it are used.
Design and implementation of this program was funded primarily by
myself. Funding contributors include the NIST Automated Manufacturing
Research Facility (funded by the Navy Manufacturing Technology
Program), the NIST Scientific and Technical Research Services, the
ARPA Persistent Object Bases project and the Computer-aided
Acquisition and the Logistic Support (CALS) program of the Office of
the Secretary of Defense.
Especially signicant contributions were made by John Ousterhout, Henry
Spencer, and Rob Savoye. See the HISTORY file for others.
Commercial Support, Classes
Several companies provide commercial support for Expect. If your
company has a financial investment in Expect or you wish to be assured
of continuing support for Expect, you can buy a support contract this
way. These companies currently include:
#200 - 580 Granville St
V6C 1W6 Canada
+1 (604) 484-6800
1937 Landings Drive
Mountain View, CA 94043
+1 (415) 903-1400
Computerized Processes Unlimited (CPU)
4200 S. I-10 Service Rd., Suite 205
Metairie, LA 70006
+1 (504) 889-2784
http://www.cpu.com/cpu/expect.htm (Expect class page)
CPU provides Expect support and also Expect classes. Contact them for
Neither NIST nor I have any financial relationship with these
companies. Please contact me to be added to this list.