Que signifie 2> / dev / null?


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.


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

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).


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.


Concis et sur le sujet. Bonne réponse.
— Sergiy Kolodyazhnyy
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.