← retour aux snippets

coproc: pipeline asynchrone natif bash

Lancer un processus en arrière-plan avec des descripteurs dédiés pour communiquer.

bash process #coproc#bash#async

objectif

Dialoguer en asynchrone avec une commande (client/serveur simple) directement depuis bash.

code minimal

# lancer bc en coproc et lui parler
coproc CALC { bc -l; }
echo '1/3' >&"${CALC[1]}"
read -r out <&"${CALC[0]}"
printf 'résultat: %s\n' "$out"

utilisation

# envoyer plusieurs commandes puis fermer l'entrée
printf 's(1)\nscale=5; 22/7\n' >&"${CALC[1]}"
exec {CALC[1]}>&-  # ferme l'entrée

variante(s) utile(s)

# serveur netcat simple et dialogue
coproc NC { nc -l 127.0.0.1 9000; }
echo "ping" >&"${NC[1]}"
read -r line <&"${NC[0]}"; echo "got: $line"

notes

  • coproc name { cmd; } crée des FDs ${name[0]} (lecture) et ${name[1]} (écriture).
  • ferme les FDs quand fini pour éviter les blocages.