Это не имеет ничего общего grep
- это потому, что канал |
перенаправляет стандартный поток вывода, stdout
тогда как Permission denied
сообщения находятся в стандартном потоке ошибок stderr
. Вы могли бы достичь желаемого результата, комбинируя потоки с помощью 2>&1
(перенаправить поток, дескриптор файла которого является 2
потоком, дескриптор файла 1
), чтобы он stderr
также stdout
передавался по каналу на вход команды grep
find / -name libGL.so.1 2>&1 | grep -v 'denied'
но было бы более обычным просто отказаться stderr
полностью, перенаправив его на/dev/null
find / -name libGL.so.1 2>/dev/null
Использование | & вместо 2> & 1 |
Если вы посмотрите на справочную страницу Bash, вы, скорее всего, заметите этот всплеск:
Если |&
используется, стандартная ошибка команды связана со стандартным вводом command2 через канал; это сокращение для 2>&1 |
.
Таким образом, вы также можете использовать эту конструкцию, если хотите присоединиться к STDERR и STDOUT:
find / -name libGL.so.1 |& grep -v 'denied'
/foo/bar/denied/libGL.so.1
, объединение,stdout
аstderr
затем фильтрация