Risposte:
Funzionano in modi completamente diversi.
Il programma unbuffer utilizza prevede di eseguire il comando denominato. Poiché prevedere crea uno pseudo-tty da associare allo stdout del processo figlio, il bambino potrebbe essere ingannato nel pensare che dovrebbe usare il buffering di linea anziché il buffering di blocco. Alcuni programmi cambieranno il loro comportamento quando isatty (stdout) è vero, altri no ed è molto difficile sapere quale sarà e quale no.
Il programma stdbuf tenta di mettere libstdbuf davanti a libc per i binari caricati dinamicamente. Dove libstdbuf ridefinisce la strategia di buffering predefinita delle chiamate stdio di libc.
L'ho scoperto da
apt-get source expect coreutils
e leggendo la fonte pertinente per ciascun programma.
unbuffer -p
potrebbe sembrare che funzioni in modo errato se esce un processo che alimenta l'input verso il buffer. Considerare:process1 | unbuffer -p process2 | process3
se termina process1, è possibile che process2 non sia ancora terminato. È impossibile per il non