Y a-t-il une différence entre unbuffer (1) et stdbuf (1)? D'après ce que je comprends, unbuffer fait plus que le "meilleur effort" d'appeler la fonction libc set (X) buf au début, puis de laisser les choses être?
Ils fonctionnent de manières complètement différentes.
Le programme non tampon utilise expect pour exécuter la commande nommée. Parce que expect crée un pseudo-tty à attacher à la sortie standard du processus enfant, l'enfant pourrait être dupe 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 qui le fera et lequel ne le sera 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.
Je l'ai découvert par
apt-get source expect coreutils
et lire la source pertinente pour chaque programme.
unbuffer -p
peuvent sembler fonctionner de manière incorrecte si un processus alimentant l'entrée en déboucleur se ferme. Considérez:process1 | unbuffer -p process2 | process3
Si processus1 se termine, le processus2 n'est peut-être pas encore terminé. Il est impossible pour le non-tampon de savoir longtemps à attendre