Bash
Pipelines
Recherche…
Syntaxe
- [heure [-p]] [!] commande1 [| ou | & command2]…
Remarques
Un pipeline est une séquence de commandes simples séparées par l'un des opérateurs de contrôle |
ou |&
( source ).
|
connecte la sortie de command1
à l'entrée de command2
.
|&
connecte la sortie standard et l'erreur standard de command1
à l'entrée standard de command2
.
Afficher tous les processus paginés
ps -e | less
ps -e
montre tous les processus, sa sortie est connectée à l'entrée de plus via |
, less
pagine les résultats.
Utiliser | &
|&
relie la sortie standard et erreur standard de la première commande à la seconde tout |
connecte uniquement la sortie standard de la première commande à la deuxième commande.
Dans cet exemple, la page est téléchargée via curl
. Avec l'option -v
, curl
écrit des informations sur stderr
, la page téléchargée est écrite sur stdout
. Le titre de la page peut être trouvé entre <title>
et </title>
.
curl -vs 'http://www.google.com/' |& awk '/Host:/{print} /<title>/{match($0,/<title>(.*)<\/title>/,a);print a[1]}'
Le résultat est:
> Host: www.google.com
Google
Mais avec |
beaucoup plus d'informations seront imprimées, c'est-à-dire celles qui sont envoyées à stderr
car seule la stdout
est acheminée vers la commande suivante. Dans cet exemple, toutes les lignes sauf la dernière ligne (Google) ont été envoyées à stderr
par curl
:
* 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
Modifier la sortie continue d'une commande
~$ 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
...
Le tube ( |
) connecte la stdout
de ping
à stdin
de grep
, qui le traite immédiatement. Certaines autres commandes, telles que sed
par défaut en mémoire tampon leur stdin
, ce qui signifie qu'il doit recevoir suffisamment de données avant d'imprimer quoi que ce soit, entraînant potentiellement des retards dans le traitement ultérieur.