Supposons que vous ayez un pipeline comme celui-ci:
$ a | b
Si barrête le traitement stdin, après un certain temps, le tuyau se remplit et écrit, de aà sa sortie standard, se bloquera (jusqu'à ce que le btraitement recommence ou qu'il meure).
Si je voulais éviter cela, je pourrais être tenté d'utiliser un tuyau plus gros (ou, plus simplement buffer(1)) comme ceci:
$ a | buffer | b
Cela me ferait simplement gagner plus de temps, mais afinirait par s'arrêter.
Ce que j'aimerais avoir (pour un scénario très spécifique que j'aborde), c'est d'avoir un tuyau "qui fuit" qui, une fois plein, laisserait tomber certaines données (idéalement, ligne par ligne) du tampon pour laisser acontinuer traitement (comme vous pouvez probablement l'imaginer, les données qui circulent dans le tuyau sont extensibles, c'est-à-dire que le traitement des données best moins important que de apouvoir fonctionner sans blocage).
Pour résumer, j'aimerais avoir quelque chose comme un tampon délimité et qui fuit:
$ a | leakybuffer | b
Je pourrais probablement l'implémenter assez facilement dans n'importe quelle langue, je me demandais juste s'il y avait quelque chose de "prêt à l'emploi" (ou quelque chose comme un bash one-liner) qui me manque.
Remarque: dans les exemples, j'utilise des tuyaux normaux, mais la question s'applique également aux tuyaux nommés
Bien que j'aie attribué la réponse ci-dessous, j'ai également décidé d'implémenter la commande leakybuffer car la solution simple ci-dessous avait certaines limites: https://github.com/CAFxX/leakybuffer