Gibt es einen Unterschied zwischen Unbuffer (1) und stdbuf (1)? Nach allem, was ich erfahre, macht Unuffer mehr als die "beste Anstrengung", den libc-Funktionssatz (X) buf am Anfang aufzurufen und dann die Dinge sein zu lassen?
Sie arbeiten auf ganz unterschiedliche Weise.
Der Programm-Unbuffer verwendet expect, um den benannten Befehl auszuführen. Da expect eine Pseudotty erstellt, die an die Standardausgabe des untergeordneten Prozesses angehängt werden kann, könnte das untergeordnete Element zu der Annahme verleitet werden, dass Zeilenpufferung anstelle von Blockpufferung verwendet werden sollte. Einige Programme ändern ihr Verhalten, wenn isatty (stdout) wahr ist, andere nicht und es ist sehr schwer zu wissen, welcher Wille und welcher nicht.
Das Programm stdbuf versucht, libstdbuf für dynamisch geladene Binärdateien vor libc zu stellen. Wobei libstdbuf die Standardpufferstrategie der libc stdio-Aufrufe neu definiert.
Ich fand das heraus durch
apt-get source expect coreutils
und Lesen der relevanten Quelle für jedes Programm.
unbuffer -p
funktionieren möglicherweise nicht richtig, wenn ein Prozess beendet wird, der Eingaben in den Unpuffer eingibt. Bedenken Sie:process1 | unbuffer -p process2 | process3
Wenn process1 beendet wird, ist process2 möglicherweise noch nicht beendet. Es ist unmöglich für Unpuffer zu wissen, lange zu warten