Cosa significa 2> / dev / null?


Risposte:


348

L'operatore> reindirizza di solito l'output su un file ma può essere su un dispositivo. Puoi anche usare >> per aggiungere.

Se non si specifica un numero, viene assunto il flusso di output standard ma è anche possibile reindirizzare gli errori

> filereindirizza stdout su file
1> filereindirizza stdout su file
2> filereindirizza stderr su file
&> filereindirizza stdout e stderr su file

/dev/nullè il dispositivo nullo che accetta qualsiasi input desiderato e lo butta via. Può essere utilizzato per sopprimere qualsiasi output.


6
c'è una differenza tra > /dev/null 2>&1e&> /dev/null
Alexander Mills,

13
In pratica oggi non penso che ci sia 2>&1una sintassi più vecchia, quindi &>non avrebbe funzionato anni fa ma entrambi sono equivalenti.
Warren Hill,

28

In breve, reindirizza stderr(fd 2) al buco nero (scarta l'output del comando).

Alcuni casi d'uso più comuni per il reindirizzamento:

command > /dev/null 2>&1 &

Esegui commandin background, scarta stdoutestderr

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

Esegui commande aggiungi stdout e stderr a un file di registro.

In Bash 4+, una forma più breve (ma meno leggibile) è funzionale

command &>> /path/to/log

3
C'è un buon motivo per usare > /dev/null 2>&1invece di &> /dev/null?
Craig McQueen,

7
@CraigMcQueen &>è nuovo in Bash 4, il primo è solo il modo tradizionale, ci sono abituato (facile da ricordare).
Terry Wang,

@CraigMcQueen secondo un commento su questa risposta , &> /dev/nullpotrebbe non funzionare in alcune shell ma> / dev / null 2> & 1 funzionerà in tutte le shell POSIX compatibili.
Stack Underflow

3
Perché è 2> & 1 e non 2 & 1> ??
Marienbad,

1
@marienbad è in realtà una domanda che vale la pena di pubblicare :-) La sintassi è fn>target, dove fnè un numero di file (in genere 0-2, alcuni programmi definiscono più numeri) ed targetè di solito un nome di file ma qui è un altro numero di file - con il prefisso con &cui è il sintassi per "Voglio un numero di file anziché un nome di file".
Toolforger

9

/dev/nullviene trattato come un buco nero in Linux / Unix, quindi puoi inserire qualsiasi cosa in questo, ma non sarai in grado di recuperarlo /dev/null.

Inoltre, 2>significa che stai reindirizzando (ad es. >) Lo stderr (ad es. 2) Nel buco nero (ad es. /dev/null)

Il tuo comando è:

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

Non tentare di terminare con un'altra barra come questa 2>/dev/null/(non è una directory).


2

Il contenuto grep -i 'abc' genererà output che viene visualizzato sulla tua console, inclusi eventuali errori.

Se si specifica, 2>/dev/nullverranno filtrati gli errori in modo che non vengano inviati alla console.

Più in dettaglio: 2 rappresenta il descrittore di errore, che è dove vengono scritti gli errori. Per impostazione predefinita, vengono stampati sulla console.

\> reindirizza l'output nella posizione specificata, in questo caso /dev/null

/dev/null è il dispositivo Linux standard a cui si invia l'output che si desidera ignorare.


Conciso e in tema. Buona risposta.
Sergiy Kolodyazhnyy,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.