Y a-t-il une différence entre unbuffer(1) et stdbuf(1) ? D'après ce que j'ai compris, unbuffer fait plus que le "meilleur effort" d'appeler la fonction libc set(X)buf au début, puis de laisser faire ?
Réponse acceptée :
Ils fonctionnent de manière complètement différente.
Le programme unbuffer utilise expect pour exécuter la commande nommée. Étant donné que expect crée un pseudo-tty à attacher à la stdout du processus enfant, l'enfant pourrait être trompé en pensant qu'il devrait utiliser la mise en mémoire tampon de ligne au lieu de la mise en mémoire tampon de bloc. Certains programmes changeront leur comportement lorsque isatty(stdout) est vrai, d'autres non et il est très difficile de savoir lequel le fera et lequel ne le fera pas.
Le programme stdbuf tente de placer libstdbuf devant libc pour les binaires chargés dynamiquement. Où libstdbuf redéfinit la stratégie de mise en mémoire tampon par défaut des appels libc stdio.
J'ai découvert cela par
apt-get source expect coreutils
et lire la source pertinente pour chaque programme.