Quando corri:
ping -q -c 1 google.com > /dev/null && echo online || echo offline
Stai essenzialmente reindirizzando l'output dello Stream 1 (cioè stdout
) a /dev/null
.
Questo va bene quando si desidera reindirizzare l'output prodotto dalla normale esecuzione di un programma. Tuttavia, nel caso in cui si desideri reindirizzare anche l'output causato da tutti gli errori, avvisi o guasti, è necessario reindirizzare il stderr
flusso o Errore standard a /dev/null
.
Un modo per farlo è anteporre il numero dello stream che si desidera reindirizzare all'operatore di reindirizzamento, in >
questo modo:Command 2> /dev/null
Quindi, il tuo comando sarebbe simile a:
ping -q -c 1 google.com > /dev/null 2> /dev/null && echo online || echo offline
Tuttavia, tieni presente che abbiamo già reindirizzato uno stream a /dev/null
. Perché non semplicemente sulle spalle sullo stesso reindirizzamento? Bash ci consente di farlo specificando il numero di flusso a cui reindirizzare. 2>&1
.
Notare il &
carattere dopo l'operatore di reindirizzamento. Questo dice alla shell che ciò che appare dopo non è un nome file, ma un identificatore per il flusso di output.
ping -q -c 1 google.com > /dev/null 2>&1 echo online || echo offline
Fai attenzione con gli operatori di reindirizzamento, il loro ordine è molto importante. Se dovessi reindirizzare nell'ordine sbagliato, otterrai risultati inaspettati.
Un altro modo in cui è possibile ottenere il silenzio completo è reindirizzare tutti i flussi di output /dev/null
all'utilizzo di questo collegamento: &>/dev/null
(o reindirizzare a un file di registro con &>/path/to/file.log
).
Quindi, scrivi il tuo comando come:
ping -q -c 1 google.com &> /dev/null && echo online || echo offline
&>/dev/null
lo è. Grazie a tutti per l'aiuto istantaneo!