Eu tenho o seguinte comando:
find / -name libGL.so.1
Que retorna muitas linhas com "Permissão negada". Quero excluir essas linhas, então adicionei o seguinte:
find / -name libGL.so.1 | grep -v 'denied'
Mas a saída é a mesma - my grep -v 'denied'
não está filtrando as linhas com Permission denied
. Eu tentei muitas variações, examinei os tutoriais do grep, mas não consigo descobrir o problema. Alguma sugestão?
Responder1
Isso não tem nada a ver grep
- é porque o canal |
redireciona o fluxo de saída padrão stdout
enquanto as Permission denied
mensagens estão no fluxo de erro padrão stderr
. Você pode obter o resultado desejado combinando os fluxos usando 2>&1
(redirecionar o fluxo cujo descritor de arquivo é 2
para o fluxo cujo descritor de arquivo é 1
) para que stderr
também 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á esta sinopse:
Se
|&
for usado, o erro padrão do comando é conectado à entrada padrão do comando2 através do pipe; é uma abreviação de2>&1 |
.
Portanto, você também pode usar esta construção se quiser juntar STDERR e STDOUT:
find / -name libGL.so.1 |& grep -v 'denied'
Responder2
Seu comando deve ser:
find / -name libGL.so.1 2>/dev/null
Find está reclamando de permissões no erro padrão (fd2). Para eliminar essas linhas, redirecione (>) o padrão para o balde de bits (/dev/null).
Responder3
As linhas de "permissão negada" vão para o fluxo stderr (erro padrão), mas você está canalizando stdout (saída padrão) por meio do grep.
Você pode redirecionar totalmente o stderr com
find / -name libGL.so.1 2> /dev/null
Responder4
Você já tentou chamar o comando comsudo?
sudo find / -name libGL.so.1
Se ainda mostrar a mensagem, use o já mencionado redirecionamento destderr (fd=2) para nirvana (/dev/null):
sudo find / -name libGL.so.1 2> /dev/null
Mais ideiasaqui, boa sorte!