Ответы:
Оператор> обычно перенаправляет вывод в файл, но может быть на устройство. Вы также можете использовать >> для добавления.
Если вы не укажете число, тогда предполагается стандартный поток вывода, но вы также можете перенаправлять ошибки
> file
перенаправляет stdout в файл
1> file
перенаправляет stdout в файл
2> file
перенаправляет stderr в файл
&> file
перенаправляет stdout и stderr в файл
/dev/null
является нулевым устройством, оно берет любой ввод и выбрасывает его. Может использоваться для подавления любого выхода.
2>&1
более старый синтаксис, поэтому &>
не работал бы много лет назад, но оба они эквивалентны.
Короче говоря, он перенаправляет 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 2>&1
вместо &> /dev/null
?
&>
- новинка в Bash 4, первая - просто традиционный способ, я просто так к этому привык (легко запомнить).
&> /dev/null
может не работать в некоторых оболочках, но> / dev / null 2> & 1 будет работать во всех POSIX-совместимых оболочках.
fn>target
где fn
номер файла (обычно 0-2, некоторые программы задают больше чисел) и target
обычно имя файла, но здесь это другой номер файла, с префиксом &
которого синтаксис "Я хочу номер файла вместо имени файла".
/dev/null
в Linux / Unix рассматривается как черная дыра, поэтому вы можете поместить в нее все, но вы не сможете получить ее обратно /dev/null
.
Далее, 2>
означает, что вы перенаправляете (то есть >
) stderr (то есть 2
) в черную дыру (то есть /dev/null
)
Ваша команда:
grep -i 'abc' content 2>/dev/null
Не пытайтесь закончить с другой косой чертой, как это - 2>/dev/null/
(это не каталог).
grep -i 'abc' content сгенерирует вывод, который отображается на вашей консоли, включая любые ошибки.
Указание 2>/dev/null
отфильтрует ошибки, чтобы они не выводились на вашу консоль.
Более подробно: 2 представляет дескриптор ошибки, в который записываются ошибки. По умолчанию они распечатываются на консоли.
\>
перенаправляет вывод в указанное место, в этом случае /dev/null
/dev/null
это стандартное устройство Linux, куда вы отправляете вывод, который хотите игнорировать.
> /dev/null 2>&1
и&> /dev/null