Когда вы бежите:
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
это так. Спасибо всем за мгновенную помощь!Be careful with the redirection operators, their order matters a lot.
, но вы не включили пример фактического использования2>&1
Вам нужно перенаправить как стандартный вывод (
>
или1>
), так и стандартную ошибку (2>
):или перенаправить одно на другое:
источник
Примеры
Ускорение пинга
В зависимости от вашей
ping
реализации вы можете быть ограничены одним счетом-c 1
. Некоторые реализации позволят вам пойти ниже этого, но вам, по сути, придется ждать неудачных поисков до истечения времени ожидания. Поэтому вместо использованияping
вы можете использоватьfing
вместо этого.медлительность провала пинга
финг намного быстрее проваливается
источник
time
команду, чем вручную вычислять разницу во времени сdate
:time { fing -p googleadf.com > /dev/null 2>&1 && echo online || echo offline; }
date
. ИМО, кому-то еще проще прочитать сгенерированный результат.