XTerm-Puffer werden beim Lesen von FIFO ausgegeben

416
Eldritch Cheese

Ich habe ein xterm-Fenster, in dem ich ständig die Ausgabe einer Named Pipe anzeigen möchte. Es scheint jedoch etwas Pufferung zu geben, und ich kann nicht herausfinden, wo es passiert.

Ich öffne zwei Terminals. Im ersten Fall mache ich eine Pfeife und halte Ausschau nach allem, was an sie gesendet wird.

mkfifo pipe tail -f pipe 

Auf dem zweiten Terminal schicke ich zwei Nachrichten aus einem einzigen Prozess durch die Pipe, die zeitlich getrennt sind. Ich verwende stdbuf, um sicherzustellen, dass die Ausgabe des Befehls nicht gepuffert ist.

stdbuf -o0 bash -c 'echo hi; sleep 5; echo bye' > pipe 

Dies funktioniert erwartungsgemäß, wenn das erste Terminal gedruckt wird hiund dann byefünf Sekunden später gedruckt wird .

Wenn ich jedoch tail -f pipeinnerhalb eines Xterm-Fensters laufe, werden die Meldungen erst angezeigt, wenn das Programm beendet ist. Natürlich wird etwas gepuffert, aber ich kann nicht finden, wo es ist. Gibt es eine Möglichkeit, zu verhindern, dass xterm die Ausgabe von Programmen zwischenspeichert?

Mein "normales Terminal" verwendet PuTTY, ssh-ed von Windows 7 bis Linux. uname -aRückgabe Linux hostname 3.2.0-4-amd64 #1 SMP Debian 3.2.65-1+deb7u1 x86_64 GNU/Linuxund xterm -vRückgabe auf dem Linux-Computer XTerm(278).

0
Das hört sich sehr seltsam an. Können Sie einige Details dazu angeben, wie Sie den Xterm aufrufen? Klingt so, als würde es eine andere Shell ausführen, oder es gibt etwas in Ihrem .bashrc oder .profile, das eine andere Umgebung einstellt. (Unterscheidet sich die Ausgabe des Befehls 'env' zwischen Terminal und xterm?) nickcrabtree vor 8 Jahren 0

1 Antwort auf die Frage

0
nickcrabtree

Bei meinen Tests erfolgt die Pufferung nur beim ersten Ausführen des Bash-Skripts. So

bash -c 'echo' > pipe; bash -c 'echo hi; sleep 5; echo bye' > pipe 

macht ziemlich viel, was Sie wollen, aber mit einem extra Newline an der Spitze. (Ich brauchte nicht einmal stdbuf).