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.