Что означает вывод в /dev/null в скриптах bash?

Что означает вывод в /dev/null в скриптах bash?

Часто я сталкиваюсь с небольшими 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

Связанный контент