objectif
Traiter des flux en parallèle sans gestion complexe de threads ou de files.
code minimal
# démarre un coprocesseur qui upper-case l'entrée
coproc UP { tr '[:lower:]' '[:upper:]'; }
printf 'data.pm\n' >&"${UP[1]}"
read -r out <&"${UP[0]}"
echo "$out" # DATA.PM
utilisation
# pipeline asynchrone avec timeouts
coproc WORK { while read -r line; do echo "ok:$line"; done; }
while read -r x; do
printf '%s
' "$x" >&"${WORK[1]}"
done < input.txt
exec {WORK[1]}>&- # fermer l'entrée
timeout 2 cat <&"${WORK[0]}" || echo "timeout"
variante(s) utile(s)
# plusieurs coprocesseurs
coproc A { sed 's/foo/bar/g'; }
coproc B { awk '{print NR":"$0}'; }
notes
coproccrée des descripteurs${NAME[0]}(lecture) et${NAME[1]}(écriture).- pensez à fermer les descripteurs pour éviter des blocages.