Что означает 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, куда вы отправляете вывод, который хотите игнорировать.


Лаконично и по теме. Хороший ответ.
Сергей Колодяжный
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.