Que signifie 2> / dev / null?

243

J'aimerais une brève explication de la ligne de commande suivante:

grep -i 'abc' content 2>/dev/null 
Naïve
la source

Réponses:

348

L'opérateur> redirige généralement la sortie vers un fichier, mais il peut s'agir d'un périphérique. Vous pouvez également utiliser >> pour ajouter.

Si vous ne spécifiez pas de nombre, le flux de sortie standard est utilisé, mais vous pouvez également rediriger les erreurs.

> fileredirections stdout vers fichier
1> fileredirections stdout vers fichier
2> fileredirections stderr vers fichier
&> fileredirections stdout et stderr vers fichier

/dev/nullest le périphérique nul qui prend toutes les entrées que vous voulez et les jette. Il peut être utilisé pour supprimer toute sortie.

Warren Hill
la source
6
y a-t-il une différence entre > /dev/null 2>&1et&> /dev/null
Alexander Mills
13
En pratique aujourd'hui, je ne pense pas qu'il existe 2>&1une syntaxe plus ancienne, de sorte que &>je n'aurais pas travaillé il y a des années, mais les deux sont équivalents.
Warren Hill
28

En bref, il redirige stderr(fd 2) vers le trou noir (supprime la sortie de la commande).

Quelques cas d'utilisation plus courants pour la redirection:

command > /dev/null 2>&1 &

Exécuter commanden arrière-plan, jeter stdoutetstderr

command >> /path/to/log 2>&1 &

Exécutez commandet ajoutez stdout et stderr à un fichier journal.

Dans Bash 4+, une forme plus courte (mais moins lisible) est fonctionnelle

command &>> /path/to/log
Terry Wang
la source
3
Y a-t-il une bonne raison d'utiliser > /dev/null 2>&1au lieu de &> /dev/null?
Craig McQueen
7
@CraigMcQueen &>est nouveau dans Bash 4, le premier n’est que la méthode traditionnelle, j’y suis tellement habitué (facile à retenir).
Terry Wang
Selon un commentaire sur cette réponse , @CraigMcQueen &> /dev/nullpourrait ne pas fonctionner dans certains shells mais> / dev / null 2> & 1 fonctionnerait dans tous les shells compatibles POSIX.
Stack
3
Pourquoi est-ce 2> & 1 et pas 2 & 1> ??
marienbad
1
@marienbad qui est en fait une question qui mérite d' affichage :-) La syntaxe est fn>target, où fnest un numéro de dossier (0-2 en général, certains programmes définissent plusieurs numéros) et targetest généralement un nom de fichier , mais ici , il est un autre filenumber - préfixé avec ce &qui est le syntaxe pour "Je veux un numéro de fichier au lieu d'un nom de fichier".
toolforger le
9

/dev/nullest traité comme un trou noir sous Linux / Unix, vous pouvez donc y insérer n'importe quoi, mais vous ne pourrez pas le récupérer /dev/null.

En outre, 2>signifie que vous redirigez (c.-à-d >. Le stderr (c.-à-d. 2) Dans le trou noir (c.-à-d. /dev/null)

Votre commande est:

grep -i 'abc' content 2>/dev/null 

N'essayez pas de terminer par une autre barre oblique comme celle-ci 2>/dev/null/(ce n'est pas un répertoire).

Indrajeet Gour
la source
2

grep -i 'abc' content générera une sortie affichée sur votre console, y compris les erreurs éventuelles.

La spécification 2>/dev/nullfiltrera les erreurs afin qu'elles ne soient pas sorties sur votre console.

Plus en détail: 2 représente le descripteur d'erreur, c'est-à-dire l'endroit où les erreurs sont écrites. Par défaut, ils sont imprimés sur la console.

\> redirige la sortie vers l'endroit spécifié, dans ce cas /dev/null

/dev/null est le périphérique Linux standard où vous envoyez la sortie que vous souhaitez ignorer.

Mauro Zallocco
la source
Concis et sur le sujet. Bonne réponse.
Sergiy Kolodyazhnyy