In this chapter, I will describe how to build scripts that communicate with multiple processes. Using multiple processes, you can build scripts that do much more than simple automation. For instance, you can connect programs together or borrow the facilities of one to enhance those of another. You can also do it transparently so that seems like a single program to anyone running the script.
In the following script, two processes are spawned. The first is
bc, an arbitrary precision arithmetic interpreter. The second is a shell. By default,
expect communicate with the most recently spawned process. In this case, the following
expect reads from the shell because it was spawned after
spawn bc spawn /bin/sh expect $prompt ;# communicate with /bin/sh
Why is this? When a
spawn command is executed, the variable
spawn_id is set to an identifier that refers to the process. The
spawn_id variable is examined each time
expect are called.
expect know how to access the process by using the value in
If another process is spawned,
spawn_id is automatically set to an identifier referring to the new process. At this point,
expect then communicate with the new process. In this example, "
spawn bc" stored an identifier into
spawn_id, but "
spawn /bin/sh" replaced that with a new identifier to itself. The following
expect command therefore communicates with the shell.
It is possible to communicate ...