GNU/Linux >> Tutoriales Linux >  >> Linux

¿Por qué parece que pierdo datos usando esta construcción de tubería bash?

Porque el nc comando dentro de <(...) también leerá desde stdin.

Ejemplo más simple:

$ nc -l 9999 >/tmp/foo &
[1] 5659

$ echo text | cat <(nc -N localhost 9999) -
[1]+  Done                    nc -l 9999 > /tmp/foo

¿De dónde salió el text ¿Vamos? A través de netcat.

$ cat /tmp/foo
text

Tu programa y nc competir por el mismo stdin, y nc obtiene algo de eso.


epoll() o poll() regresando con E/POLLIN solo le dirá que un único read() puede no bloquear.

No es que pueda hacer muchas lecturas de un byte hasta una nueva línea, como lo hace.

Yo digo puede porque un read() después de epoll() devuelto con E/POLLIN aún puede bloquearse.

Su código también intentará leer más allá de EOF e ignorará por completo cualquier error de lectura().


Linux
  1. ¿Por qué el documento principal Shell Here no funciona para el subcomando en Dash pero Bash funciona?

  2. ¿Por qué este "mientras se lee" funciona en una terminal, pero no en un script de Shell?

  3. Uso de declaraciones de casos en Bash

  4. ¿Por qué todos usan Docker?

  5. Canalizar la salida a la función bash

Cómo usar el comando de lectura Bash

Cómo leer archivos línea por línea en Bash

Comando de lectura Bash

Cómo leer un archivo línea por línea en Bash

Cómo monitorear el progreso de los datos a través de una tubería usando el comando 'pv'

Bash scripting:cómo leer datos de archivos de texto