Expect is a program to control interactive applications. These applications interactively prompt and expect a user to enter keystrokes in response. By using Expect, you can write simple scripts to automate these interactions. And using automated interactive programs, you will be able to solve problems that you never would have even considered before.
Expect can save you hours of drudgery, and this book will start you on your way. This first chapter is an overview of Expect. I will describe some simple applications and present some short scripts. However, the explanations are not intended to be complete but rather to whet your appetite and give you a taste of the good things to come. In the following chapters, I will revisit all of the concepts mentioned in this chapter and cover them in more detail.
fsck, the UNIX file system check program, can be run from a shell script only with the
-n options. The manual defines the
-y option as follows:
-n option is safer, but almost uselessly so. This kind of interface is inexcusably bad, yet many programs have the same style.
ftp, a file transfer program, has an option that disables interactive prompting so that it can be run from a script. But it provides no way to take alternative action should an error occur.
Expect is a tool for controlling interactive programs. It solves the
fsck problem, providing all the interactive functionality non-interactively. Expect is not specifically designed for
fsck and can handle errors from
ftp as well.
The problems with
ftp illustrate a major limitation in the user interface offered by shells such as
csh, and others (which I will generically refer to as “the shell” from now on). The shell does not provide a way of reading output from and writing input to a program. This means the shell can run
fsck, but only by missing out on some of its useful features. Some programs cannot be run at all from a shell script. For example,
passwd cannot be run without a user interactively supplying the input. Similar programs that cannot be automated in a shell script are
gdb. A large number of application programs are written with the same fault of demanding user input.
Expect was designed specifically to interact with interactive programs. An Expect programmer can write a script describing the dialogue. Then the Expect program can run the “interactive” program non-interactively. Expect can also be used to automate only parts of a dialogue, since control can be passed from the script to the keyboard and vice versa. This allows a script to do the drudgery and a user to do the fun stuff.