Esto es básicamente una respuesta negativa. Parece que ni dd, ni mbuffer, ni siquiera pvfunciona son todos los casos, en particular si la tasa de datos generados por el productor puede variar mucho. Doy algunos casos de prueba a continuación. Después de escribir el comando, espere unos 10 segundos, luego escriba >(para ir al final de los datos, es decir, espere al final de la entrada).
zsh -c 'echo foo0; sleep 3; \
printf "Line %060d\n" {1..123456}; \
echo foo1; sleep 5; \
echo foo2' | dd bs=64K | less
Aquí, después de escribir >, hay que esperar 5 segundos, lo que significa que el productor (secuencia de comandos zsh) ha bloqueado antes que sleep 5. Aumentar el bstamaño a, por ejemplo, 32M no cambia el comportamiento, aunque el búfer de 32MB es lo suficientemente grande. Sospecho que esto se debe a que los ddbloques en la salida en lugar de continuar con la entrada. Usar oflag=nonblockno es una solución porque esto descarta datos.
zsh -c 'echo foo0; sleep 3; \
printf "Line %060d\n" {1..123456}; \
echo foo1; sleep 5; \
echo foo2' | mbuffer -q | less
Con mbuffer, el problema es que la primera línea (foo0) no aparece inmediatamente. No parece haber ninguna opción para habilitar el almacenamiento en línea en la entrada.
zsh -c 'echo foo0; sleep 3; \
printf "Line %060d\n" {1..123456}; \
echo foo1; sleep 5; \
echo foo2' | pv -q -B 32m | less
Con pv, el comportamiento es similar a dd. Peor aún, sospecho que hace cosas incorrectas al terminal, ya que a veces lessya no puede recibir información del terminal; por ejemplo, no se puede abandonar con q.