A coprocess is a process that runs in parallel with the shell and with which the shell can communicate. The shell starts the process in the background, connecting its standard input and output to a two-way pipe. There are two syntaxes for running a coprocess:
coprocname non-simple command
Start a named coprocess coproccommand args
Start an unnamed coprocess
The shell creates an array variable named name
to hold the file descriptors for communication with the coprocess.
name
[0]
is the output of the
coprocess (input to the controlling shell) and
name
[1]
is the input to the
coprocess (output from the shell). In addition, the variable
name
_PID
holds the
process-ID of the coprocess. When no name is supplied, the shell uses
COPROC
.
As of version 4.1, there can be only one active coprocess at a time.
The following example demonstrates the basic usage of the
coproc
keyword and the related variables:
$coproc testproc (echo 1
Start a named coprocess >read aline ; echo $aline)
in the background [1] 5090 $echo ${testproc[@]}
Show the file descriptors 63 60 $echo $testproc_PID
Show the coprocess PID 5090 $read out <&${testproc[0]}
Read the first line of coprocess $echo $out
output and show it 1 $echo foo >&${testproc[1]}
Send coprocess some input $read out2 <&${testproc[0]}
Read second output line [1]+ Done coproc testproc (echo 1; read aline; echo $aline) $echo $out2
Show the second output line foo
3.21.76.0