Isso não tem nada a ver com grep
isso - é porque o canal |
redireciona o fluxo de saída padrão, stdout
enquanto as Permission denied
mensagens estão no fluxo de erros padrão stderr
. Você pode obter o resultado desejado combinando os fluxos usando 2>&1
(redirecione o fluxo cujo descritor de arquivo é 2
para o fluxo cujo descritor de arquivo é 1
) para que stderr
, assim como stdout
seja canalizado para a entrada do comando grep
find / -name libGL.so.1 2>&1 | grep -v 'denied'
mas seria mais comum simplesmente descartar stderr
completamente, redirecionando-o para/dev/null
find / -name libGL.so.1 2>/dev/null
Usando | & em vez de 2> & 1 |
Se você der uma olhada na página de manual do Bash, provavelmente notará este anúncio:
Se |&
usado, o erro padrão de comando é conectado à entrada padrão do command2 através do tubo; é uma abreviação de 2>&1 |
.
Portanto, você também pode usar essa construção se desejar ingressar em STDERR e STDOUT:
find / -name libGL.so.1 |& grep -v 'denied'
/foo/bar/denied/libGL.so.1
, combinandostdout
estderr
, em seguida, filtrando iria esconder o resultado