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.
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ée2
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.
2>&1
J’ai créé un fichier test.sh avec le contenu suivant.
#!/bin/bash
echo 'foo'
chmod +x test.sh
) :alex@alex-W65-67SJ:~/Bureau$ ./test.sh
foo
#!/bin/bash
echo 'foo'
bar
alex@alex-W65-67SJ:~/Bureau$ ./test.sh
foo
./test.sh: ligne 5: bar : commande introuvable
alex@alex-W65-67SJ:~/Bureau$ ./test.sh > log-test.txt
foo
STDOUT
) avec l’opérateur >
.STDERR
(2) ou est STDOUT
(1), on lance l’exécution comme ceci :./test.sh > log-test.txt 2>&1
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
./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 :