Que signifie « > /dev/null 2>&1 » ?

Apprendre à utiliser les sorties STDERR et STDOUT avec des exemples simples sous Linux en gérant les redirections de fichiers.
  • Linux
STDOUT et STDERR sous Linux
Exécution script avec STDERR et STDOUT > /dev/null 2>&1

On voit souvent l’écriture « > /dev/null 2>&1 » écriture un peu partout dès que l’on parle exécution de script et notamment dans la crontab, mais que veut dire cette redirection ?

  • > permet de rediriger la sortie STDOUT (echo …)
  • /dev/null est le chemin vers lequel la sortie est envoyée
  • 2 représente STDERR (les erreurs)
  • > permet de rediriger la sortie STDERR (le 2)
  • &1 est une référence vers 1 (STDOUT)

Facile non ?

Imaginons la ligne ./test.sh > /dev/null 2>&1 n’affichera jamais aucun message, info et erreur comprises.

En revanche, la ligne ./test.sh > /dev/null nous aurait montré l’erreur, mais pas l’info.

Un exemple pour illustrer la redirection 2>&1

J’ai créé un fichier test.sh avec le contenu suivant.

#!/bin/bash
echo 'foo'
Si je l’exécute (après l’avoir rendu exécutable avec chmod +x test.sh) :
alex@alex-W65-67SJ:~/Bureau$ ./test.sh
foo

Ajout d’une erreur dans le fichier

Mon fichier test.sh comporte désormais les lignes suivantes.
#!/bin/bash
echo 'foo'
bar
Après exécution, mon terminal me renvoie ceci :
alex@alex-W65-67SJ:~/Bureau$ ./test.sh
foo
./test.sh: ligne 5: bar : commande introuvable
Parfait ! Et si je décide de logger la sortie dans un fichier de log ?

Logger STDOUT et STDERR

Mon fichier test.sh comporte toujours mon erreur « bar ».
alex@alex-W65-67SJ:~/Bureau$ ./test.sh > log-test.txt
Le contenu du fichier « log-test.txt » est le suivant :
foo
L’erreur n’a pas été logguée ! Pourquoi ? Car on a seulement redirigé la sortie (STDOUT) avec l’opérateur >.
Pour rediriger STDERR (2) ou est STDOUT (1), on lance l’exécution comme ceci :
./test.sh > log-test.txt 2>&1
Pour rappel 2>&1 signifie d’envoyer 2 là où est 1. Ce qui donne le fichier de log-test.txt suivant :
foo
./test.sh: ligne 5: bar : commande introuvable

Logger uniquement STDERR ?

./test.sh 2> log-test.txt

Nous renverra uniquement l’erreur, soit :

./test.sh: ligne 5: bar : commande introuvable

Car 2> représente la sortie STDERR.
Pour aller plus loin :

Article publié le

Dernière modification le

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.