GNU/Linux >> Tutoriels Linux >  >> Linux

Comment rediriger stderr vers stdout dans Bash

Lorsque vous redirigez la sortie d'une commande vers un fichier ou que vous la dirigez vers une autre commande, vous remarquerez peut-être que les messages d'erreur sont imprimés à l'écran.

Dans Bash et d'autres shells Linux, lorsqu'un programme est exécuté, il utilise trois flux d'E/S standard. Chaque flux est représenté par un descripteur de fichier numérique :

  • 0 - stdin , le flux d'entrée standard.
  • 1 - stdout , le flux de sortie standard.
  • 2 - stderr , le flux d'erreur standard.

Un descripteur de fichier est juste un nombre représentant un fichier ouvert.

Le flux d'entrée fournit des informations au programme, généralement en tapant au clavier.

La sortie du programme va dans le flux d'entrée standard et les messages d'erreur vont dans le flux d'erreur standard. Par défaut, les flux d'entrée et d'erreur sont imprimés à l'écran.

Redirection de la sortie #

La redirection est un moyen de capturer la sortie d'un programme et de l'envoyer en entrée à un autre programme ou fichier.

Les flux peuvent être redirigés à l'aide du n> opérateur, où n est le numéro du descripteur de fichier.

Quand n est omis, la valeur par défaut est 1 , le flux de sortie standard. Par exemple, les deux commandes suivantes sont identiques ; les deux redirigeront la sortie de la commande (stdout ) au fichier.

command > file
command 1> file

Pour rediriger l'erreur standard (stderr ) utilisez le 2> opérateur :

command 2> file

Vous pouvez écrire les deux stderr et stdout dans deux fichiers distincts :

command 2> error.txt 1> output.txt

Pour supprimer l'affichage des messages d'erreur à l'écran, redirigez stderr à /dev/null :

command 2> /dev/null

Redirection stderr vers stdout #

Lors de l'enregistrement de la sortie du programme dans un fichier, il est assez courant de rediriger stderr vers stdout afin que vous puissiez tout avoir dans un seul fichier.

Pour rediriger stderr vers stdout et que les messages d'erreur soient envoyés au même fichier que la sortie standard, utilisez ce qui suit :

command > file 2>&1

> file rediriger le stdout vers file , et 2>&1 rediriger le stderr à l'emplacement actuel de stdout .

L'ordre de redirection est important. Par exemple, l'exemple suivant redirige uniquement stdout vers file . Cela se produit parce que le stderr est redirigé vers stdout avant la stdout a été redirigé vers file .

command 2>&1 > file 

Une autre façon de rediriger stderr vers stdout est d'utiliser le &> construction. Dans Bash &> a la même signification que 2>&1 :

command &> file

Conclusion #

Comprendre le concept des redirections et des descripteurs de fichiers est très important lorsque vous travaillez sur la ligne de commande.

Pour rediriger stderr et stdout , utilisez le 2>&1 ou &> constructions.

Si vous avez des questions ou des commentaires, n'hésitez pas à laisser un commentaire.


Linux
  1. Comment rediriger uniquement Stderr ?

  2. Comment rediriger la sortie vers un fichier et stdout

  3. Comment parser un fichier CSV dans Bash ?

  4. Comment rediriger stderr et stdout vers différents fichiers dans la même ligne de script ?

  5. Comment rediriger un domaine vers un autre domaine localement ?

Comment vérifier si un fichier ou un répertoire existe dans Bash

Comment lire des fichiers ligne par ligne dans Bash

Comment vérifier si un fichier ou un répertoire existe dans Bash

Comment lire un fichier ligne par ligne dans Bash

Comment utiliser les opérateurs de test de fichiers Bash sous Linux

Comment grep une section d'un fichier dans bash shell