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

Я хотел бы получить краткое объяснение следующей командной строки:

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

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

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

> file перенаправляет stdout в файл
1> file перенаправляет stdout в файл

2> file перенаправляет stderr в файл

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

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

Обратите внимание, что > file 2>&1 это более старый синтаксис, который все еще работает, &> file это аккуратнее, но не сработало бы на старых системах.

Короче говоря, он перенаправляет 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

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

В дальнейшем, 2> означает, что вы перенаправляете (т.е. >) stderr (т.е. 2) в черную дыру (т.е. /dev/null)

Ваша команда - это:

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

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

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

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

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

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

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

Сначала нам нужно поговорить о > оператор. Он перенаправляет вывод слева от символа вправо от символа.

Так что это должно мыслиться как :

>source_command целевой файл

Другие вещи, которые мы должны знать

0 means stdin 1 means stdout(useful output)2 means stderr(error message output)

Как по умолчанию, это работает как command 1 > target_file

Относительно /dev/null> -- это специальный файл, который отбрасывает перенаправление выходного канала на него.

Итак, в вашем вопросе это означает

Запустите команду и не показывайте мне сообщения об ошибках, отбросьте их.