Під час запуску:
ping -q -c 1 google.com > /dev/null && echo online || echo offline
Ви по суті лише переспрямовуєте вихід потоку 1 (тобто stdout) на /dev/null.
Це добре, коли ви хочете перенаправити висновок, отриманий при звичайному виконанні програми. Однак у випадку, якщо ви також хочете перенаправити результат, викликаний усіма помилками, попередженнями або збоями, вам слід також переспрямувати stderrпотік або потік Standard Error на /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це. Дякую всім за миттєву допомогу!