: ${TMPDIR:=/tmp} TMPOUT=${TMPDIR}/coproc-wait-$BASHPID coproc { echo a b c; sleep 2; } case $COPROC_PID in [0-9]*) ;; *) echo COPROC_PID not integer ;; esac echo ${COPROC[@]} read LINE <&${COPROC[0]} echo $LINE wait $COPROC_PID coproc REFLECT { cat - ; } case $REFLECT_PID in [0-9]*) ;; *) echo REFLECT_PID not integer ;; esac echo ${REFLECT[@]} echo flop >&${REFLECT[1]} read LINE <&${REFLECT[0]} echo $LINE { sleep 1; kill $REFLECT_PID; } & wait $REFLECT_PID >$TMPOUT 2>&1 || echo "coproc.tests: REFLECT: status $?" grep 'Terminated.*coproc.*REFLECT' < $TMPOUT >/dev/null 2>&1 || { echo "coproc.tests: wait for REFLECT failed" >&2 } rm -f $TMPOUT exec 2>&1 coproc xcase -n -u case $COPROC_PID in [0-9]*) ;; *) echo COPROC_PID not integer ;; esac echo ${COPROC[@]} echo foo >&${COPROC[1]} read <&${COPROC[0]} echo $REPLY echo ${COPROC[@]} cat /etc/passwd | grep root | awk -F: '{print $1;}' | sed 1q exec 4<&${COPROC[0]}- exec >&${COPROC[1]}- echo ${COPROC[@]} read foo <&4 echo $foo >&2 exit 0