¿Por qué este comando grep no funciona?


24

Cuando trato de usar grep de esta manera:

service --status-all | grep network

Todavía enumera todos los servicios, aunque lo conecté greppara restringirlo a la cadena de "red" solamente


Después del hecho:

Noté este artículo que explica por qué el comando se comporta de esta manera, eso es lo que me gusta de Linux, siempre hay una buena razón, pero no necesariamente intuitiva

Respuestas:


41

Tratar:

service --status-all |& grep network

Las aplicaciones de línea de comandos pueden imprimir en dos secuencias de texto conocidas como salida estándar (stdout) y error estándar (stderr). Por defecto, el terminal solo muestra la salida para ambos de forma idéntica.

Stdout recibe el número 1, y stderr recibe el número 2. Por defecto, los operadores de redirección, como >, |y se <aplican solo a stdout, número 1.

|&canaliza tanto stdout como stderr juntos al proceso en la secuencia de entrada estándar (stdin) de la derecha, lo que hace que grepfuncione como esperaba.

No sé por qué service --status-allestá imprimiendo stderr aquí, pero en general, tener una secuencia stderr separada es muy útil, ya que le permite ver errores incluso cuando stdout está silenciado.


Gracias por la respuesta, parece que esto ha generado mucho interés. Así que supongo que no fui el único con este problema.
Meer Borg

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.