Bash
pijpleidingen
Zoeken…
Syntaxis
- [time [-p]] [!] command1 [| of | & command2]…
Opmerkingen
Een pijplijn is een reeks eenvoudige opdrachten gescheiden door een van de besturingsoperators |
of |&
( bron ).
|
verbindt de output van command1
met de input van command2
.
|&
verbindt standaarduitvoer en standaardfout van command1
met de standaardingang van command2
.
Toon alle gepagineerde processen
ps -e | less
ps -e
toont alle processen, de output is verbonden met de input van meer via |
, less
pagineren de resultaten.
| & Gebruiken
|&
verbindt standaarduitvoer en standaardfout van de eerste opdracht met de tweede terwijl |
verbindt alleen de standaarduitvoer van het eerste commando met het tweede commando.
In dit voorbeeld wordt de pagina gedownload via curl
. met -v
optie curl
schrijft wat info over stderr
inclusief, de gedownloade pagina is geschreven op stdout
. Titel van pagina kan worden gevonden tussen <title>
en </title>
.
curl -vs 'http://www.google.com/' |& awk '/Host:/{print} /<title>/{match($0,/<title>(.*)<\/title>/,a);print a[1]}'
Uitgang is:
> Host: www.google.com
Google
Maar met |
er wordt veel meer informatie afgedrukt, dat wil zeggen informatie die naar stderr
wordt verzonden, omdat alleen stdout
wordt doorgestuurd naar het volgende commando. In dit voorbeeld zijn alle regels behalve de laatste regel (Google) curl
naar stderr
gestuurd:
* 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
Wijzig de continue uitvoer van een opdracht
~$ 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
...
De pijp ( |
) verbindt de stdout
van ping
met de stdin
van grep
, die deze onmiddellijk verwerkt. Sommige andere opdrachten, zoals sed
standaard, bufferen hun stdin
, wat betekent dat het voldoende gegevens moet ontvangen voordat het iets afdrukt, wat mogelijk vertragingen in de verdere verwerking veroorzaakt.