GNU/Linux >> LINUX-Kenntnisse >  >> Linux

„unbuffer“ oder „stdbuf“ zum Entfernen der Stdout-Pufferung?

Gibt es einen Unterschied zwischen unbuffer(1) und stdbuf(1)? Soweit ich weiß, macht unbuffer mehr als die „beste Anstrengung“, die libc-Funktion set(X)buf am Anfang aufzurufen und die Dinge dann sein zu lassen?

Akzeptierte Antwort:

Sie funktionieren auf völlig unterschiedliche Weise.

Das Programm unbuffer verwendet Expect, um den benannten Befehl auszuführen. Da Expect ein Pseudo-TTY erstellt, das an stdout des untergeordneten Prozesses angehängt wird, könnte das Kind dazu verleitet werden, zu denken, dass es Zeilenpufferung anstelle von Blockpufferung verwenden sollte. Einige Programme ändern ihr Verhalten, wenn isatty(stdout) wahr ist, andere nicht, und es ist sehr schwer zu wissen, welche dies tun und welche nicht.

Das Programm stdbuf versucht, libstdbuf für dynamisch geladene Binärdateien vor libc zu setzen. Wobei libstdbuf die Standard-Pufferstrategie der libc stdio-Aufrufe neu definiert.

Ich habe das herausgefunden durch

 apt-get source expect coreutils

und lesen Sie die relevante Quelle für jedes Programm.


Linux
  1. Stdout eines Befehls für T Sekunden verwerfen?

  2. libc-Quellspeicherort - zum Herunterladen oder Online-Anzeigen?

  3. Ist es sicher, die Pufferung mit stdout und stderr zu deaktivieren?

  4. Nohup für Python-Skript funktioniert nicht, wenn es im Hintergrund mit &ausgeführt wird

  5. Verschachtelte for-Schleife

4 Linux-Distributionen für Spiele

Eine Einführung in bpftrace für Linux

Auswählen eines Druckers für Linux

Bash für Schleife

Vollständige Anleitung zum Entfernen von Docker-Images

Warum zeigt nm keine Symbole für /lib/i386-linux-gnu/libc.so.6 an?