Warum wird der Puffer mit „Ja“ nicht aufgefüllt?

Warum wird der Puffer mit „Ja“ nicht aufgefüllt?

Angenommen, ich mache etwas wie yes | apt-get install foo. Ich weiß, dass es yesununterbrochen eine Menge y\n's auf stdout druckt. Aber apt-getes kann nur einige davon verarbeiten. Warum füllt es yesden Puffer nicht? Druckt es tatsächlich nur ein , y\nwenn es von angefordert wird apt-get?

Antwort1

NB: Dies ist keine vollständige Antwort, aber ich behalte sie hier, hauptsächlich, weil es weiter unten gute Kommentare gibt.

Wird tatsächlich nur ein gedruckt, y\nwenn dies von angefordert wird apt-get?

Ja. Die rechte Seite der Pipes arbeitet zur gleichen Zeit, während die linke Seite eine Ausgabe erzeugt. Außerdem wird die linke Seite nicht bis zur „Fertigstellung“ gehen, es sei denn, dies ist erforderlich. Das Folgende erzeugt beispielsweise eine Endlosschleife, die in das Terminal schreibt, bis sie beendet wird.

while true; do echo foo; done

Im Folgenden werden jedoch 10 Zeilen ausgedruckt und anschließend ordnungsgemäß beendet.

while true; do echo foo; done | head

Sobald der headBefehl abgeschlossen ist, muss die linke Seite des Rohrs nicht mehr arbeiten und die „Endlosschleife“ existiert nicht mehr.

verwandte Informationen