Wie kann man die Ausgabe eines beliebigen Shell-Befehls ungepuffert machen?
Gibt es eine Möglichkeit, shell-Befehle ausführen, ohne output-buffering?
Beispielsweise hexdump file | ./my_script
wird nur die Eingabe von hexdump zu my_script in gepufferten chunks, nicht zeilenweise.
Eigentlich will ich wissen, eine Allgemeine Lösung wie man jeden Befehl Ungepuffert?
InformationsquelleAutor der Frage bodacydo | 2010-08-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
AFAIK, Sie können es nicht tun ohne hässliche hacks. Schreiben in eine pipe (oder Lesen) stellt sich automatisch auf volle Pufferung und es gibt nichts, was Sie dagegen tun können :-(. "Line Pufferung" (das ist, was Sie wollen) wird nur verwendet, wenn das Lesen/schreiben von einem terminal. Das hässliche hacks genau dies tun: Sie verbinden ein Programm, um ein pseudo-terminal, so dass die anderen Werkzeuge in der pipe Lesen/schreiben aus, dass die Terminals in line-buffering-Modus. Das ganze problem ist hier beschrieben:
Die Seite hat auch einige Vorschläge (die bereits erwähnten "hässlichen hacks"), was zu tun, also mit
unbuffer
oder ziehen Sie einige tricks mitLD_PRELOAD
.InformationsquelleAutor der Antwort Nordic Mainframe
Versuchen
stdbuf
enthalten in den GNU coreutils und somit nahezu jede Linux-Distribution. Dies legt die Länge des Puffers für die Eingabe, Ausgabe und Fehler zu null:InformationsquelleAutor der Antwort jpatokal
Den Befehl
unbuffer
von derexpect
Paket deaktiviert die Ausgabe-Pufferung:Ubuntu Manpage: unbuffer - unbuffer Ausgabe
Beispiel:
InformationsquelleAutor der Antwort Siu Ching Pong -Asuka Kenji-
Können Sie auch das
script
Befehl, um die Ausgabe vonhexdump
line-buffered - (hexdump
wird in ein pseudo-terminal, die trickshexdump
zu denken, sein schreiben, seine stdout auf ein terminal, und nicht an eine pipe).InformationsquelleAutor der Antwort vroc