Angenommen, ich mache etwas wie yes | apt-get install foo
. Ich weiß, dass es yes
ununterbrochen eine Menge y\n
's auf stdout druckt. Aber apt-get
es kann nur einige davon verarbeiten. Warum füllt es yes
den Puffer nicht? Druckt es tatsächlich nur ein , y\n
wenn 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\n
wenn dies von angefordert wirdapt-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 head
Befehl abgeschlossen ist, muss die linke Seite des Rohrs nicht mehr arbeiten und die „Endlosschleife“ existiert nicht mehr.