Я хотел бы краткое объяснение следующей командной строки:
grep -i 'abc' content 2>/dev/null
command-line
bash
redirect
stdout
наивный
источник
источник
> /dev/null 2>&1
и&> /dev/null
2>&1
более старый синтаксис, поэтому&>
не работал бы много лет назад, но оба они эквивалентны.Короче говоря, он перенаправляет
stderr
(fd 2) в черную дыру (отбрасывает вывод команды).Еще несколько распространенных вариантов использования для перенаправления:
Запустите
command
в фоновом режиме, сбросьтеstdout
иstderr
Запустите
command
и добавьте stdout и stderr в файл журнала.В Bash 4+ более короткая (но менее читаемая) форма является функциональной
источник
> /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
)Ваша команда:
Не пытайтесь закончить с другой косой чертой, как это -
2>/dev/null/
(это не каталог).источник
grep -i 'abc' content сгенерирует вывод, который отображается на вашей консоли, включая любые ошибки.
Указание
2>/dev/null
отфильтрует ошибки, чтобы они не выводились на вашу консоль.Более подробно: 2 представляет дескриптор ошибки, в который записываются ошибки. По умолчанию они распечатываются на консоли.
\>
перенаправляет вывод в указанное место, в этом случае/dev/null
/dev/null
это стандартное устройство Linux, куда вы отправляете вывод, который хотите игнорировать.источник