Coprocesses
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
.
Caution
As of version 4.1, there can be only one active coprocess at a time.
Example
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
Get bash Pocket Reference 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.