Redirecting Input And Output
The −i and -u flags each connect both the input and output of a process. It is possible to connect just the input or just the output using the -input and -output flags.
The -input flag identifies a spawn id from which input should be read. The -output flag identifies a spawn id to which output should be written. The general syntax for specifying connections is that a -output flag applies to the most recent -input flag. For example, the following flags indicate that input from spawn id i is written to spawn id o.
-input $i -output $o
The following fragment connects three processes together. Input from id1 is sent to id2 and id3. Input from id2 is sent to id1. Input from id3 is discarded.
interact {
-input $id1 -output $id2 -output $id3
-input $id2 -output $id1
-input $id3
}If id3 does not produce any output, it does not need to be listed. However, if a process is producing unwanted data, it must be discarded or else the operating system will eventually stop the process when its internal buffers fill up. Listing it without an associated -output flag as I have done here effectively causes the output to be discarded.
Patterns may be applied to spawned processes identified with -input flags. As with the -i and -u flags, patterns immediately follow the spawn id specifications to which they apply. For example, to execute the procedure doX whenever the character X is generated by id2, the pattern is listed immediately after the -input flag for id2.
interact { -input ...