Descripteur de fichier du script shell

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 :

A.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 au cours…6082>Une erreur s’est produite pendant le processus de redirection.

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.

Diriger le contenu du fichier vers un autre emplacement via.stdout.

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>

Rediriger le message d’erreur vers un autre emplacement via stderr.

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

Rediriger stderr au même endroit que stdout.
  • &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.

.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée.