> For the complete documentation index, see [llms.txt](https://docs.glassworks.tech/unix-shell/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.glassworks.tech/unix-shell/pipes-et-redirections/110-pipes.md).

# Pipes et redirections

Les commandes UNIX bénéficient d'un système de *communication inter-processus*.

C'est à dire, une commande peut envoyer des résultats sur un *flux*, et ce flux peut -être lu, traité, transformé ou interprété par une commande suivante. On pourrait ainsi créer des enchaînements de commandes.

<figure><img src="/files/Khe2nzYfs6vlJIKGPdkx" alt=""><figcaption></figcaption></figure>

Il existe trois flux adressables :

* *standard in* : un flux entrant
* *standard out* : un flux sortant (avec les résultats)
* *standard err* : un flux sortant (avec des erreurs)

Les données sortantes (`stdout`) d’une commande peuvent être redirigées dans le `stdin` d’une commande suivante :

```bash
cat test.txt | grep "hello" | wc -l
```

<figure><img src="/files/QC0YpI2ubN2aPWMcRrPk" alt=""><figcaption></figcaption></figure>

> On utilise le symbole `|` pour représenter les tuyaux entre les différentes commandes.

Et les deux extrémités de mon flux ?

* Coté entrant, on pourrait lire des données du flux *standard in*. Selon la commande, on va lire automatiquement du *standard in*, ou bien préciser de lire de ce flux (au lieu d'un fichier) avec une option
* Coté sortant, on affiche le texte résultant de notre enchaînement sur le *standard out*, qui dans notre cas est dans l'invite de commandes.

<figure><img src="/files/oVfQts9KsgbsRwtSEfrx" alt=""><figcaption></figcaption></figure>

Qu’est-ce qui se passe si je tape `grep "hello"` tout seul sur l’invite de commande ? Essayez !

* Vous arrivez à expliquer ce qui se passe ?
