¿Cómo hacer exactamente una llamada al sistema de lectura en Bash?

¿Cómo hacer exactamente una llamada al sistema de lectura en Bash?

Lo que quiero hacer es procesar los datos cuando lleguen, independientemente de los saltos de línea.

  • Cuando se usa read -n $ncon una tubería en stdin, Bash realiza una llamada al sistema read (0, buf, 1)por byte, lo cual es demasiado lento si la cantidad de datos a procesar no es pequeña (digamos, 1 MB o más).
  • Cuando uso, read -N $nBash realiza repetidas llamadas al sistema read (0, buf, <RestOf$n>)hasta que $nse alcanza, por lo que no puedo comenzar a procesar lo recibido hasta ahora.
  • Cuando lo uso, read -N $n -t 0.1obtengo un valor vacío $REPLYincluso si se han leído algunos datos. Eso significa: se pierden datos. ¿Es esto un error o una característica de Bash?

Entonces, ¿cómo puedo hacer exactamente una readllamada al sistema con un countargumento arbitrario bashy luego procesar la entrada recibida hasta el momento?

información relacionada