Когда вы бежите:
ping -q -c 1 google.com > /dev/null && echo online || echo offline
По сути, вы только перенаправляете выходные данные потока 1 (т.е. stdout
) в /dev/null
.
Это хорошо, когда вы хотите перенаправить вывод, который получается при нормальном выполнении программы. Однако, если вы также хотите перенаправить вывод, вызванный всеми ошибками, предупреждениями или сбоями, вам также следует перенаправить stderr
поток или стандартную ошибку в /dev/null
.
Одним из способов сделать это является добавление номера потока, который вы хотите перенаправить, к оператору перенаправления, >
например так:Command 2> /dev/null
Следовательно, ваша команда будет выглядеть так:
ping -q -c 1 google.com > /dev/null 2> /dev/null && echo online || echo offline
Но обратите внимание, что мы уже перенаправили один поток на /dev/null
. Почему бы просто не воспользоваться контрейлером на том же перенаправлении? Bash позволяет нам сделать это, указав номер потока, на который будет перенаправляться. 2>&1
,
Обратите внимание на &
символ после оператора перенаправления. Это говорит оболочке, что следующим будет не имя файла, а идентификатор для выходного потока.
ping -q -c 1 google.com > /dev/null 2>&1 echo online || echo offline
Будьте осторожны с операторами перенаправления, их порядок очень важен. Если вы перенаправили в неправильном порядке, вы получите неожиданные результаты.
Другой способ достичь полной тишины - перенаправить все выходные потоки, /dev/null
используя этот ярлык: &>/dev/null
(или перенаправить в файл журнала с помощью &>/path/to/file.log
).
Следовательно, напишите вашу команду как:
ping -q -c 1 google.com &> /dev/null && echo online || echo offline
&>/dev/null
это так. Спасибо всем за мгновенную помощь!