it-roy-ru.com

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

Часто я сталкиваюсь с небольшими скриптами bash, которые используют такой синтаксис в операторах if:

some command > /dev/null 2>&1

Какова цель вывода в /dev/null таким образом, и что означает 2>&1?

Кажется, это всегда работает, но я хотел бы знать, что он делает.

121
javanix

>/dev/null перенаправляет стандартный вывод команды на нулевое устройство, которое является специальным устройством, которое отбрасывает записанную в него информацию

2>&1 перенаправляет стандартный поток ошибок в стандартный поток вывода (stderr = 2, stdout = 1). Обратите внимание, что это берет стандартный поток ошибок и указывает его в то же место, что и стандартный вывод в тот момент. Это является причиной порядка >/some/where 2>&1, потому что сначала нужно указать куда-нибудь stdout и затем направить stderr в одно и то же место, если в конце нужно объединить оба потока.

На практике это предотвращает отображение любого вывода команды (как stdout, так и stderr). Используется, когда вам нет дела до вывода команды.

165
João Pinto

STDIN представлен 0, STDOUT - 1, а STDERR - 2.

/ dev/null это ведро с битами: место, куда вы сбрасываете все, что вам не нужно.


Таким образом, STDOUT перенаправляется в сегмент битов (мусор), а STDERR перенаправляется туда, где находится STDOUT: сегмент битов.


Вы также можете сделать это:

>/dev/null 2>/dev/null
65
Sid