# I/O Redirections





|                 | Descripteur | Identifiant |
| --------------- | ----------- | ----------- |
| Entrée standard | stdin       | 0           |
| Sortie standard | stdout      | 1           |
| Sortie erreur   | stderr      | 2           |



#### Redirection de sortie: `>`

Redirige la <u>sortie standart</u> vers un nouveau fichier:

```bash
$ ls > liste.txt
```

Redirige la <u>sortie standart</u> vers un fichier (ajoute à la suite):

```bash
$ ls >> liste.txt
```

Redirige la <u>sortie erreur</u> vers un fichier:

```bash
>2 erreur.log
```



#### Redirection d'entrée: `<`

Considère liste.txt comme entrée standart (au lieu du clavier):

```bash
$ sort < liste.txt
```

Envoyer un contenu à une commande avec votre clavier.

```bash
$ sort -n << FIN
heredoc… ❯ 45
heredoc… ❯ 23
heredoc… ❯ 12
heredoc… ❯ 78
heredoc… ❯ 45
heredoc… ❯ 9
heredoc… ❯ FIN
9
12
23
45
45
78

$ wc -m << STOP
heredoc… ❯ Combien de caracteres ?
heredoc… ❯ STOP
      24
```



#### On peut combiner les 2

```bash
$ sort < liste.txt > liste_triee.txt
```



#### Rediriger vers un autre descripteur: `>&`

Rediriger la sortie standard sur la sortie d'erreur:

```bash
$ echo "Error" 1>&2
$ echo "Error" >&2
```



#### Le trou noir: `/dev/null`

- si on affiche son contenu, on n'obtient rien.
- si on écrit quelque chose dedans, il disparait.

```bash
$ echo "Bonjour"
Bonjour

$ echo "Bonjour" >/dev/null

```



#### Connecter 2 processus: `|`

La sortie d'un programme est utilisée comme entrée d'un autre.

```bash
$ echo "Hello!" | tr "[:lower:]" "[:upper:]"
HELLO!
```



#### Erreurs

Rediriger les <u>erreurs</u> vers un fichier:

```bash
$ UneCommande 2>  fichier-erreurs.txt
```

Rediriger les <u>erreurs</u> vers un fichier (ajouter à la suite)::

```bash
$ UneCommande 2>> erreurs.log
```

Rediriger la <u>sortie standart</u> et les <u>erreurs</u> vers un fichier:

```bash
$ UneCommande 2> erreurs.log
```



Rediriger la sortie et les erreurs vers un fichier:

```bash
$ UneCommande 2>&1 | tee fichier.txt
```



#### Fusionner les sorties

Il est possible de fusionner les sorties (standart et erreur) dans un seul et même fichier. 

```bash
$ bad_command >>filename 2>&1
```

