C'è una differenza tra unbuffer(1) e stdbuf(1)? Da quello che ho capito, unbuffer fa più del "miglior sforzo" di chiamare la funzione libc set(X)buf all'inizio, e poi lasciare che le cose siano?
Risposta accettata:
Funzionano in modi completamente diversi.
Il programma unbuffer utilizza Expect per eseguire il comando denominato. Poiché Expect crea uno pseudo-tty da collegare allo stdout del processo figlio, il bambino potrebbe essere indotto a pensare che dovrebbe utilizzare il buffer di linea invece del buffer di blocco. Alcuni programmi cambieranno il loro comportamento quando isatty(stdout) è vero, altri no ed è molto difficile sapere quale lo farà 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 libc stdio.
L'ho scoperto da
apt-get source expect coreutils
e leggere la fonte pertinente per ogni programma.