Combining Spawn Ids In A Single -input Or -output

It is possible to combine multiple spawn ids in a single -input or -output. This uses the same syntax as the expect command uses to combine multiple spawn ids in a −i flag. Both of the following interact commands have the same result.

interact -input $i -output $o1 -output $o2
interact -input $i -output "$o1 $o2"

The second form is preferred unless the two output spawn ids have different eof actions. For example, in the following command, the action for an end-of-file on o1 is return, while the action for an end-of-file on o2 is "close $i“.

interact -input $i -output $o1 -output $o2 eof {
    close $i
}

Input spawn ids can be combined similarly. The following command takes the input from i1 and i2 and sends it to o1.

interact -input "$i1 $i2" -output $o1

Note that writing two -input flags in a row with no -output in between causes the first input source to be discarded. This can be quite useful for the same reasons that it is occasionally handy to redirect output to /dev/null in the shell.

Using these shorthands, it is possible to write the interact in kibitz more succinctly:

interact {
    -input "$user_spawn_id $userin" -output $process
    -input $process -output "$user_spawn_id $userout"
}

Get Exploring Expect now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.