Supongamos que tiene una tubería como la siguiente:
$ a | b
Si b
deja de procesar la entrada estándar, después de un tiempo la tubería se llena y escribe desde a
su entrada estándar, se bloqueará (hasta que b
comience a procesar nuevamente o muera).
Si quisiera evitar esto, podría sentir la tentación de usar una tubería más grande (o, más simplemente buffer(1)
) de esta manera:
$ a | buffer | b
Esto simplemente me daría más tiempo, pero al final a
finalmente se detendría.
Lo que me encantaría tener (para un escenario muy específico que estoy abordando) es tener una tubería "con fugas" que, cuando está llena, dejaría caer algunos datos (idealmente, línea por línea) desde el búfer para permitir a
continuar procesamiento (como probablemente pueda imaginar, los datos que fluyen en la tubería son prescindibles, es decir, tener los datos procesados b
es menos importante que a
poder ejecutarlos sin bloquearlos).
Para resumir, me encantaría tener algo así como un búfer limitado y con fugas:
$ a | leakybuffer | b
Probablemente podría implementarlo con bastante facilidad en cualquier idioma, me preguntaba si hay algo "listo para usar" (o algo así como un bash one-liner) que me estoy perdiendo.
Nota: en los ejemplos estoy usando tuberías regulares, pero la pregunta se aplica igualmente a las tuberías con nombre
Si bien obtuve la respuesta a continuación, también decidí implementar el comando leakybuffer porque la solución simple a continuación tenía algunas limitaciones: https://github.com/CAFxX/leakybuffer