Respuestas:
Trabajan de maneras completamente diferentes.
El programa que utiliza unbuffer espera ejecutar el comando nombrado. Debido a que esperar crea una pseudo-tty para adjuntar a la stdout del proceso hijo, el niño podría ser engañado pensando que debería usar el almacenamiento en línea en lugar del almacenamiento en bloque. Algunos programas cambiarán su comportamiento cuando isatty (stdout) sea cierto, otros no lo harán y es muy difícil saber qué lo hará y cuáles no.
El programa stdbuf intenta poner libstdbuf delante de libc para 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 leer la fuente relevante para cada programa.
unbuffer -p
puede parecer que funcionan incorrectamente si sale un proceso de alimentación de entrada a unbuffer. Considere:process1 | unbuffer -p process2 | process3
Si el proceso1 sale, el proceso2 puede que aún no haya terminado. Es imposible que unbuffer sepa esperar mucho