Ich habe gerade ein paar Befehle in einem Terminal ausgeführt und mich gefragt, ob Unix/Linux beim Ausführen von Pipe-Befehlen Abkürzungen verwendet?
Nehmen wir zum Beispiel an, ich habe eine Datei mit einer Million Zeilen, von denen die ersten 10 hello world
enthalten . Wenn Sie den Befehl grep "hello world" file | head
stoppt der erste Befehl, sobald er 10 Zeilen findet, oder durchsucht er zuerst die gesamte Datei?
Akzeptierte Antwort:
Art von. Die Shell hat keine Ahnung, was die von Ihnen ausgeführten Befehle tun werden, sie verbindet nur die Ausgabe des einen mit der Eingabe des anderen.
Wenn grep
findet mehr als 10 Zeilen, die „Hallo Welt“ sagen, dann head
wird alle 10 Zeilen haben, die es will, und die Pipe schließen. Dies wird grep
verursachen mit einem SIGPIPE getötet werden, sodass er nicht mit dem Scannen einer sehr großen Datei fortfahren muss.