Intro
Parfois, nous voyons des commandes comme celle-ci dans le shell:
- $ ls foo > /dev/…null 2>&1
Il peut être difficile de comprendre ce que cela fait pour la première fois, donc cette note l’expliquera brièvement.
Redirection E/S
Supposons que vous ayez maintenant un simple fichier texte :

Dirigeons maintenant le contenu de ce fichier vers un autre emplacement:

.6082>Rediriger le contenu du fichier.
Dans l’action de redirection ci-dessus, nous ne voyons aucune sortie affichée sur le terminal, car la commande > redirige le contenu de test.txt vers…output.txt, qui est une sortie standard (stdout).
A la différence de la sortie standard, il y a l’erreur standard (stdr), par exemple

Une erreur s’est produite pendant le processus de redirection car il n’y a pas de fichier portant le nom no_such_file.txt dans le répertoire ci-dessous. Dans ce cas, même si la commande > est utilisée, il n’est pas possible de saisir le contenu dans output.txt, car il n’y a pas de stdout, mais un message d’erreur de stderror à la place.
Descripteur de fichier
Le descripteur de fichier peut être considéré comme un entier positif pour un fichier ouvert. Si vous avez 100 fichiers ouverts, vous avez fondamentalement 100 descripteurs de fichiers correspondants.
Dans les systèmes Unix/Unix-like, il existe également des descripteurs de fichiers dédiés à stdout et stderr, qui, pour être clair, ont des destinations dédiées pour la sortie de ces…pour ces destinations de sortie :
- 1 : pour stdout
- 2 : pour stderr
Mise en commun
Selon le concept ci-dessus, si vous voulez écrire le contenu d’un fichier connu dans un autre fichier, vous pouvez le faire.

Le 1 de ce côté représente stdout, dont la syntaxe est représentée comme:
- >
Donc, quand vous voyez quelqu’un écrire de.foo > à.bar, c’est juste omettre l’élément
De même, pour rediriger stderr, vous pouvez faire ceci :

.2296>
Si vous voulez rediriger à la fois stdout et stderr vers la même destination, vous pouvez le faire.

- &1 est utilisé comme référence à un descripteur de fichier id de 1, c’est-à-dire une référence à stdout.
- 2>&1 signifie la redirection du contenu de stderr vers stdout.
.2867>Summary
- Il y a généralement deux destinations pour la sortie : stdout et stderr.
- Nous pouvons diriger la sortie vers différents endroits, mais généralement vers un fichier.
- Le descripteur de fichier peut être utilisé pour distinguer entre stdout (1) et stderr (2).
- La commande >location de sortie est en fait une abréviation de la commande 1>location de sortie.
- Nous pouvons utiliser & pour faire référence à d’autres descripteurs de fichiers.
.