Risposte:
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
> file
reindirizza stdout su file
1> file
reindirizza stdout su file
2> file
reindirizza stderr su file
&> file
reindirizza 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.
2>&1
una sintassi più vecchia, quindi &>
non avrebbe funzionato anni fa ma entrambi sono equivalenti.
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 command
in background, scarta stdout
estderr
command >> /path/to/log 2>&1 &
Esegui command
e aggiungi stdout e stderr a un file di registro.
In Bash 4+, una forma più breve (ma meno leggibile) è funzionale
command &>> /path/to/log
> /dev/null 2>&1
invece di &> /dev/null
?
&>
è nuovo in Bash 4, il primo è solo il modo tradizionale, ci sono abituato (facile da ricordare).
&> /dev/null
potrebbe non funzionare in alcune shell ma> / dev / null 2> & 1 funzionerà in tutte le shell POSIX compatibili.
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".
/dev/null
viene 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).
Il contenuto grep -i 'abc' genererà output che viene visualizzato sulla tua console, inclusi eventuali errori.
Se si specifica, 2>/dev/null
verranno 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.
> /dev/null 2>&1
e&> /dev/null