Tengo el siguiente comando:
find / -name libGL.so.1
Lo que devuelve muchas líneas con "Permiso denegado". Quiero excluir esas líneas, así que agregué lo siguiente:
find / -name libGL.so.1 | grep -v 'denied'
Pero el resultado es el mismo: my grep -v 'denied'
no filtra las líneas con Permission denied
. Probé muchas variaciones, revisé los tutoriales de grep, pero no puedo resolver el problema. ¿Alguna sugerencia?
Respuesta1
Eso no tiene nada que ver grep
, se debe a que la canalización |
redirige el flujo de salida estándar stdout
mientras que los Permission denied
mensajes están en el flujo de error estándar stderr
. Puede lograr el resultado que desea combinando las secuencias usando 2>&1
(redireccionar la secuencia cuyo descriptor de archivo es 2
a la secuencia cuyo descriptor de archivo es 1
) para que stderr
además stdout
se canalice a la entrada del comando grep
find / -name libGL.so.1 2>&1 | grep -v 'denied'
pero sería más habitual simplemente descartarlo stderr
por completo redirigiéndolo a/dev/null
find / -name libGL.so.1 2>/dev/null
Usando |& en lugar de 2>&1 |
Si echas un vistazo a la página de manual de Bash, probablemente notarás esta propaganda:
Si
|&
se usa, el error estándar del comando se conecta a la entrada estándar del comando2 a través de la tubería; es una abreviatura de2>&1 |
.
Así que también puedes usar esta construcción si quieres unir STDERR y STDOUT:
find / -name libGL.so.1 |& grep -v 'denied'
Respuesta2
Tu comando debería ser:
find / -name libGL.so.1 2>/dev/null
Find se queja de permisos en el error estándar (fd2). Para eliminar esas líneas, redirija (>) estándar al depósito de bits (/dev/null).
Respuesta3
Las líneas de "permiso denegado" van a la secuencia stderr (error estándar), pero usted está canalizando stdout (salida estándar) a través de grep.
Puedes redirigir stderr por completo con
find / -name libGL.so.1 2> /dev/null
Respuesta4
¿Has intentado llamar al comando consudo?
sudo find / -name libGL.so.1
Si aún muestra el mensaje, use la redirección ya mencionada destderr (fd=2) a nirvana (/dev/null):
sudo find / -name libGL.so.1 2> /dev/null
Más ideasaquí, ¡buena suerte!