In the context of named pipes (fifos) the use of an additional file descriptor can enable non-blocking piping behaviour.
(
rm -f fifo
mkfifo fifo
exec 3<fifo # open fifo for reading
trap "exit" 1 2 3 15
exec cat fifo | nl
) &
bpid=$!
(
exec 3>fifo # open fifo for writing
trap "exit" 1 2 3 15
while true;
do
echo "blah" > fifo
done
)
#kill -TERM $bpid
See: Named Pipe closing prematurely in script?Named Pipe closing prematurely in script?