GNU/Linux >> Tutoriales Linux >  >> Linux

¿`unbuffer` o `stdbuf` para eliminar el almacenamiento en búfer estándar?

¿Hay alguna diferencia entre unbuffer(1) y stdbuf(1)? Por lo que deduzco, unbuffer hace más que el "mejor esfuerzo" de llamar a la función libc set(X)buf al principio, y luego dejar que las cosas sean?

Respuesta aceptada:

Funcionan de maneras completamente diferentes.

El programa unbuffer usa expect para ejecutar el comando nombrado. Debido a que expect crea un pseudo-tty para adjuntarlo a la salida estándar del proceso secundario, el niño podría caer en la trampa de pensar que debería usar el búfer de línea en lugar del búfer de bloque. Algunos programas cambiarán su comportamiento cuando isatty(stdout) sea verdadero, otros no y es muy difícil saber cuáles lo harán y cuáles no.

El programa stdbuf intenta poner libstdbuf delante de libc para archivos binarios cargados dinámicamente. Donde libstdbuf redefine la estrategia de almacenamiento en búfer predeterminada de las llamadas libc stdio.

Descubrí esto por

 apt-get source expect coreutils

y leyendo la fuente relevante para cada programa.


Linux
  1. Comprender YAML para Ansible

  2. ¿Es posible que el descriptor de archivo de Linux 0 1 2 no sea para stdin, stdout y stderr?

  3. El script Nohup para Python no funciona cuando se ejecuta en segundo plano con &

  4. ¿Hay un equivalente de cd - para cp o mv?

  5. ¿Por qué nm no muestra símbolos para /lib/i386-linux-gnu/libc.so.6?

4 distribuciones de Linux para juegos

Una introducción a bpftrace para Linux

Elegir una impresora para Linux

Golpe para bucle

Guía completa para eliminar imágenes de Docker

Bucle for anidado