Wie man die Ausgabe von beliebigen shell-Befehl Ungepuffert?
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?
mehr von Ihnen positiv bewertet werden Frage unix.stackexchange.com/questions/25372
InformationsquelleAutor 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 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:unbuffer
für mich.stdbuf
bestanden keine Signale (SIGUSR2
in meinem Fall), die ich geschickt, um es auf diecommand
(was ich auch so wollte), währendunbuffer
schien das nicht zu wollen.mehr von Ihnen positiv bewertet werden Antwort unix.stackexchange.com/a/25378/5510
stdbuf verwendet man die oben genannten LD_PRELOAD tricks, dies zu tun und daher nicht die Arbeit mit statisch gelinkten oder setuid-bit ausführbare Dateien. Sehen Sie, diese Frage für eine Diskussion: stackoverflow.com/questions/13644024/...
Ich fand das sehr nützlich, aber begrenzt, da es keine Skripts ausführen implizit. Allerdings
stdbuf -o0 bash
läuft eine komplette session mit allen meine Skripte und Aliase zur Verfügung, und ohne output-buffering auf jeder der Befehle, die ist genau das, was ich wollte. Die Pufferung wurde natürlich restauriert, auf den Ausgang aus diesembash
Instanz. Ich bin mit Ubuntu 16.04.InformationsquelleAutor jpatokal
Den Befehl
unbuffer
von derexpect
Paket deaktiviert die Ausgabe-Pufferung:Ubuntu Manpage: unbuffer - unbuffer Ausgabe
Beispiel:
ja es geht stdout und stderr, das ist by design: unbuffer verwendet erwarten, und zu erwarten ist, es zu emulieren, die menschliche in der Mensch-Programm Interaktion, und die Menschen nicht bekommen, um zu sehen, ob ein Ausgang ist die Ausgabe auf stdout oder stderr.
InformationsquelleAutor 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).In meinem Fall
stdbuf
gescheitert, aber script funktioniert wie ein Charme. Das Programm puffert die Ausgabe, wenn es ist, antee
, aber nicht, wenn die Ausführung im terminal. So, das script funktioniert! Danke!Sehr clevere Lösung, und es funktioniert!! Danke. 🙂
Nur ein problem: pro
script
'sman
Seite als Verweis durch dieser "Bestimmte interaktive Befehle, wievi(1)
erstellen Sie Müll in der typescript-Datei. Script funktioniert am besten mit Befehlen, die nicht zu manipulieren den Bildschirm, die Ergebnisse sollen zum nachahmen ein hardcopy-terminal."InformationsquelleAutor vroc