Что означает 2> / dev / null?

Ответы:

348

Оператор> обычно перенаправляет вывод в файл, но может быть на устройство. Вы также можете использовать >> для добавления.

Если вы не укажете число, тогда предполагается стандартный поток вывода, но вы также можете перенаправлять ошибки

> fileперенаправляет stdout в файл
1> fileперенаправляет stdout в файл
2> fileперенаправляет stderr в файл
&> fileперенаправляет stdout и stderr в файл

/dev/nullявляется нулевым устройством, оно берет любой ввод и выбрасывает его. Может использоваться для подавления любого выхода.

Уоррен Хилл
источник
6
Есть ли разница между > /dev/null 2>&1и&> /dev/null
Александр Миллс
13
Сегодня на практике я не думаю, что существует 2>&1более старый синтаксис, поэтому &>не работал бы много лет назад, но оба они эквивалентны.
Уоррен Хилл
28

Короче говоря, он перенаправляет stderr(fd 2) в черную дыру (отбрасывает вывод команды).

Еще несколько распространенных вариантов использования для перенаправления:

command > /dev/null 2>&1 &

Запустите commandв фоновом режиме, сбросьте stdoutиstderr

command >> /path/to/log 2>&1 &

Запустите commandи добавьте stdout и stderr в файл журнала.

В Bash 4+ более короткая (но менее читаемая) форма является функциональной

command &>> /path/to/log
Терри Ван
источник
3
Есть ли веская причина для использования > /dev/null 2>&1вместо &> /dev/null?
Крейг МакКуин
7
@CraigMcQueen &>- новинка в Bash 4, первая - просто традиционный способ, я просто так к этому привык (легко запомнить).
Терри Ван
@CraigMcQueen, согласно комментарию к этому ответу , &> /dev/nullможет не работать в некоторых оболочках, но> / dev / null 2> & 1 будет работать во всех POSIX-совместимых оболочках.
Stack Underflow
3
Почему это 2> & 1, а не 2 & 1> ??
Мариенбад
1
@marienbad, на самом деле это вопрос, который стоит опубликовать :-) Синтаксис: fn>targetгде fnномер файла (обычно 0-2, некоторые программы задают больше чисел) и targetобычно имя файла, но здесь это другой номер файла, с префиксом &которого синтаксис "Я хочу номер файла вместо имени файла".
инструментальный инструмент
9

/dev/nullв Linux / Unix рассматривается как черная дыра, поэтому вы можете поместить в нее все, но вы не сможете получить ее обратно /dev/null.

Далее, 2>означает, что вы перенаправляете (то есть >) stderr (то есть 2) в черную дыру (то есть /dev/null)

Ваша команда:

grep -i 'abc' content 2>/dev/null 

Не пытайтесь закончить с другой косой чертой, как это - 2>/dev/null/(это не каталог).

Индраджит Гур
источник
2

grep -i 'abc' content сгенерирует вывод, который отображается на вашей консоли, включая любые ошибки.

Указание 2>/dev/nullотфильтрует ошибки, чтобы они не выводились на вашу консоль.

Более подробно: 2 представляет дескриптор ошибки, в который записываются ошибки. По умолчанию они распечатываются на консоли.

\> перенаправляет вывод в указанное место, в этом случае /dev/null

/dev/null это стандартное устройство Linux, куда вы отправляете вывод, который хотите игнорировать.

Мауро Заллокко
источник
Лаконично и по теме. Хороший ответ.
Сергей Колодяжный