Это не имеет ничего общего 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
затем фильтрацияВаша команда должна быть:
Find жалуется на разрешения на стандартную ошибку (fd2). Чтобы исключить эти строки, перенаправьте стандарт (>) в область битов (/ dev / null).
источник
Строки «Отказано в разрешении» направляются в поток stderr (стандартная ошибка), но вы пропускаете stdout (стандартный вывод) через grep.
Вы можете полностью перенаправить stderr с помощью
источник
Вы пытались вызвать команду с помощью sudo ?
Если это все еще показывает сообщение, используйте уже упомянутый редирект stderr (fd = 2) в нирвану (/ dev / null) :
Больше идей здесь , удачи!
источник