Expect normally works with programs that read either from the standard input or
/dev/tty. Some programs do not read their input in this way. A good example is the
xterm is an X Window System client that provides a shell in a terminal emulator. In this section, I will describe three different ways to control
xterm program reads user input from a network socket. The standard input and
/dev/tty are both ignored. Hence, spawning
xterm in the usual way is fruitless.
spawn xterm ;# WRONG
Interacting in this way—with no special knowledge of
xterm—requires a program that can drive X applications the way Expect drives character-oriented programs. Such programs exist. However, discussion of them is beyond the scope of this book.
Instead of attempting to control an
xterm, it often suffices to have an
xterm execute an Expect script. For example, suppose you want to be able to pop up a window that automatically runs the
chess script defined in Chapter 10 (p. 234). The following command would suffice:
xterm -e chess.exp
xterm continues to take input in the usual way. Therefore it is even possible to have scripts that accept user input. For example, the auto-
ftp script defined in Chapter 3 (p. 83) could be started up with the following command. Once running, it is controllable from the keyboard just the way an
xterm normally is.
xterm -e aftp.exp
Both of these examples give up the possibility of controlling the
xterm from another script. It is possible ...