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