На этот вопрос уже есть ответ здесь:
Часто я сталкиваюсь с небольшими сценариями bash, которые используют такого рода синтаксис в операторах if:
some command > /dev/null 2>&1
Какова цель такого вывода в / dev / null
и что означает 2> & 1
?
Кажется, что всегда так работа, но я хотел бы знать, что он делает.
STDIN представлен 0, STDOUT - 1, а STDERR - 2.
/ dev / null - это набор битов: место, куда вы сбрасываете все, что вам не нужно.
Итак, STDOUT перенаправляется в корзину битов (мусор), а STDERR перенаправляется туда, где находится STDOUT: битовая корзина.
Вы также можете сделать это:
>/dev/null 2>/dev/null
>/dev/null
перенаправляет стандартный вывод команды на нулевое устройство, которое является специальным устройством, которое сбрасывает записанную в него информацию
2>&1
перенаправляет поток стандартной ошибки в стандартный поток вывода (stderr = 2, стандартный вывод = 1). Обратите внимание, что это берет стандартный поток ошибок и указывает его в то же место, что и стандартный вывод в тот момент. Это является причиной заказа >/some/where 2>&1
, потому что нужно сначала указать stdout куда-то, а затем указать stderr на одно и то же место, если вы хотите объединить оба потока в конце.
На практике это предотвращает отображение любого вывода команды (как stdout, так и stderr). Используется, когда вам нет дела до вывода команды.