Kiedy biegniesz:
ping -q -c 1 google.com > /dev/null && echo online || echo offline
Jesteś w zasadzie tylko przekierowanie wyjścia strumienia 1 (tj stdout
) w celu /dev/null
.
Jest to dobre, gdy chcesz przekierować dane wyjściowe, które powstają podczas normalnego wykonywania programu. Jeśli jednak chcesz przekierować dane wyjściowe spowodowane przez wszystkie błędy, ostrzeżenia lub awarie, powinieneś również przekierować stderr
strumień lub Błąd standardowy /dev/null
.
Jednym ze sposobów na to jest dodanie numeru strumienia, który chcesz przekierować do operatora przekierowania, na >
przykład:Command 2> /dev/null
Dlatego twoje polecenie wyglądałoby następująco:
ping -q -c 1 google.com > /dev/null 2> /dev/null && echo online || echo offline
Zauważ jednak, że przekierowaliśmy już jeden strumień do /dev/null
. Dlaczego nie po prostu piggyback na tym samym przekierowaniu? Bash pozwala nam to zrobić, określając numer strumienia, na który należy przekierować. 2>&1
.
Zwróć uwagę na &
znak po operatorze przekierowania. Mówi to powłoce, że to, co pojawi się później, nie jest nazwą pliku, ale identyfikatorem strumienia wyjściowego.
ping -q -c 1 google.com > /dev/null 2>&1 echo online || echo offline
Uważaj na operatorów przekierowań, ich kolejność ma duże znaczenie. Jeśli przekierujesz w niewłaściwej kolejności, otrzymasz nieoczekiwane wyniki.
Innym sposobem na osiągnięcie całkowitej ciszy jest przekierowanie wszystkich strumieni wyjściowych do /dev/null
korzystania z tego skrótu: &>/dev/null
(lub przekierowanie do pliku dziennika za pomocą &>/path/to/file.log
).
Dlatego napisz polecenie jako:
ping -q -c 1 google.com &> /dev/null && echo online || echo offline
&>/dev/null
to jest. Dziękujemy wszystkim za natychmiastową pomoc!