Muschelrohre - die Reihenfolge der Dinge

442
Drew LeSueur

Weil netcatauf meiner Box nicht unterstützt -e, die netcatman - Seite gibt mir diese Abhilfe:

$ rm -f /tmp/f; mkfifo /tmp/f $ cat /tmp/f | /bin/sh -i 2>&1 | nc -l 127.0.0.1 1234 > /tmp/f 

Ich verstehe nicht, wie das funktioniert. Ich denke zwar, wenn Sie versuchen cat /tmp/f, das zu blockieren, bis etwas geschrieben wird /tmp/fund wenn das blockiert ist, wie läuft der Rest des Befehls ab?

2

1 Antwort auf die Frage

3
grawity

Alle Befehle in einer Pipeline werden gleichzeitig gestartet und gleichzeitig ausgeführt - Befehl 2 wartet nicht darauf, dass Befehl 1 beendet wird. Stattdessen sind Pipelines auf das Blockieren von Lesevorgängen angewiesen, bis der vorhergehende Befehl etwas ausgegeben hat.

Zum Beispiel ist der Ausgang (stdout) von 1cat /tmp/f direkt mit dem Eingang von verbunden ; Immer wenn sh versucht, aus seinem Standardwert zu lesen, wird es blockiert, bis cat eine Ausgabe erzeugt hat./bin/sh -i


1 (Fast direkt; der Stdout der Katze und der Stdin der Katze sind an zwei Enden eines "Pipe" -Objekts gebunden.)

Wow, je mehr ich bash / shell lerne, desto mehr beeindruckt es mich. Vielen Dank. Drew LeSueur vor 5 Jahren 0