Bash
Pipelines
Suche…
Syntax
- [Zeit [-p]] [!] Befehl1 [| oder | & command2]…
Bemerkungen
Eine Pipeline ist eine Folge einfacher Befehle, die durch einen der Steueroperatoren |
oder |&
( Quelle ).
|
verbindet den Ausgang von command1
mit dem Eingang von command2
.
|&
verbindet Standardausgabe und Standardfehler von command1
mit der Standardeingabe von command2
.
Zeige alle Prozesse paginiert
ps -e | less
ps -e
zeigt alle Prozesse an, sein Ausgang ist über |
mit dem Eingang von more verbunden less
paginiert die Ergebnisse.
Verwenden von | &
|&
verbindet Standardausgabe und Standardfehler des ersten Befehls mit dem zweiten Befehl, während |
verbindet nur die Standardausgabe des ersten Befehls mit dem zweiten Befehl.
In diesem Beispiel wird die Seite über curl
heruntergeladen. Mit der Option -v
schreibt curl
einige Informationen über stderr
einschließlich der heruntergeladenen Seite in stdout
. Der Seitentitel befindet sich zwischen <title>
und </title>
.
curl -vs 'http://www.google.com/' |& awk '/Host:/{print} /<title>/{match($0,/<title>(.*)<\/title>/,a);print a[1]}'
Ausgabe ist:
> Host: www.google.com
Google
Aber mit |
Es werden viel mehr Informationen gedruckt, dh diejenigen, die an stderr
gesendet werden, da nur stdout
an den nächsten Befehl weitergeleitet wird. In diesem Beispiel wurden alle Zeilen mit Ausnahme der letzten Zeile (Google) per curl
an stderr
gesendet:
* Hostname was NOT found in DNS cache
* Trying 172.217.20.228...
* Connected to www.google.com (172.217.20.228) port 80 (#0)
> GET / HTTP/1.1
> User-Agent: curl/7.35.0
> Host: www.google.com
> Accept: */*
>
* HTTP 1.0, assume close after body
< HTTP/1.0 200 OK
< Date: Sun, 24 Jul 2016 19:04:59 GMT
< Expires: -1
< Cache-Control: private, max-age=0
< Content-Type: text/html; charset=ISO-8859-1
< P3P: CP="This is not a P3P policy! See https://www.google.com/support/accounts/answer/151657?hl=en for more info."
< Server: gws
< X-XSS-Protection: 1; mode=block
< X-Frame-Options: SAMEORIGIN
< Set-Cookie: NID=82=jX0yZLPPUE7u13kKNevUCDg8yG9Ze_C03o0IM-EopOSKL0mMITEagIE816G55L2wrTlQwgXkhq4ApFvvYEoaWF-oEoq2T0sBTuQVdsIFULj9b2O8X35O0sAgUnc3a3JnTRBqelMcuS9QkQA; expires=Mon, 23-Jan-2017 19:04:59 GMT; path=/; domain=.google.com; HttpOnly
< Accept-Ranges: none
< Vary: Accept-Encoding
< X-Cache: MISS from jetsib_appliance
< X-Loop-Control: 5.202.190.157 81E4F9836653D5812995BA53992F8065
< Connection: close
<
{ [data not shown]
* Closing connection 0
Google
Ändern Sie die fortlaufende Ausgabe eines Befehls
~$ ping -c 1 google.com # unmodified output
PING google.com (16.58.209.174) 56(84) bytes of data.
64 bytes from wk-in-f100.1e100.net (16.58.209.174): icmp_seq=1 ttl=53 time=47.4 ms
~$ ping google.com | grep -o '^[0-9]\+[^()]\+' # modified output
64 bytes from wk-in-f100.1e100.net
64 bytes from wk-in-f100.1e100.net
64 bytes from wk-in-f100.1e100.net
64 bytes from wk-in-f100.1e100.net
64 bytes from wk-in-f100.1e100.net
64 bytes from wk-in-f100.1e100.net
64 bytes from wk-in-f100.1e100.net
64 bytes from wk-in-f100.1e100.net
64 bytes from wk-in-f100.1e100.net
64 bytes from wk-in-f100.1e100.net
...
Die Pipe ( |
) verbindet den stdout
von ping
mit dem stdin
von grep
, der ihn sofort verarbeitet. Einige andere Befehle wie sed
Standard ihre Pufferung stdin
, was bedeutet , dass es genügend Daten erhalten hat, bevor er etwas gedruckt wird, möglicherweise Verzögerungen bei der Weiterverarbeitung zu verursachen.