Під час запуску:
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
це. Дякую всім за миттєву допомогу!