Questo non ha senso per me.
wibble > /dev/null 2>&1
Penso che avrebbe più senso se fosse qualcosa del genere:
wibble 2>&1 > /dev/null
In altre parole
Commands Output Sendall STDERRORS to STDOUT then SEND it all to /dev/null
Qual è il pensiero dietro l'ordine del reindirizzamento del comando xxx > /dev/null 2>1
?
Risposta accettata:
I reindirizzamenti vengono elaborati da sinistra a destra. Se lo fai
2>&1 1> /dev/null
Il primo reindirizzamento rende stderr
punta allo stream che stdout
indica in quel momento (che è essenzialmente il tuo tty). Non fa stderr
un alias di stdout
.
Quindi stdout
viene reindirizzato al bit bucket. Il stdout
il reindirizzamento non ha effetto sul precedente stderr
reindirizzare. stderr
si riferisce ancora alla tua tty.
Quindi:
ls file_that_doesnt_exist 2>&1 1> /dev/null
stamperà solo il messaggio di errore sul tuo terminale.
Il bash
la pagina della documentazione di reindirizzamento lo menziona esplicitamente:
Si noti che l'ordine dei reindirizzamenti è significativo. Ad esempio, il comando
ls > dirlist 2>&1
indirizza sia lo standard output che lo standard error al file dirlist, mentre il comando
ls 2>&1 > dirlist
indirizza solo lo standard output a file dirlist, perché l'errore standard è stato duplicato dallo standard output prima che lo standard output fosse reindirizzato a dirlist .