Pourquoi cette commande grep ne fonctionne-t-elle pas?


24

Lorsque j'essaie d'utiliser grep de cette façon:

service --status-all | grep network

Il répertorie toujours tous les services même si je l'ai canalisé greppour le restreindre à la chaîne "réseau" uniquement


Après coup:

Remarqué cet article qui explique pourquoi la commande se comporte de cette façon, c'est ce que j'aime à propos de Linux, il y a toujours une bonne raison, mais pas nécessairement intuitive

Réponses:


41

Essayer:

service --status-all |& grep network

Les applications en ligne de commande peuvent imprimer sur deux flux de texte appelés sortie standard (stdout) et erreur standard (stderr). Par défaut, le terminal affiche simplement la sortie pour les deux de manière identique.

Stdout reçoit le numéro 1, et stderr reçoit le numéro 2. Par défaut, les opérateurs de redirection, comme >, |et <ne s'appliquent qu'aux stdout, numéro 1.

|&dirige à la fois stdout et stderr vers le processus sur le flux d'entrée standard (stdin) de droite, ce qui grepfonctionne comme prévu.

Je ne sais pas pourquoi l' service --status-allimpression sur stderr ici, mais en général, avoir un flux stderr séparé est très utile, car il vous permet de voir les erreurs même lorsque stdout est désactivé.


Merci pour la réponse, cela semble avoir suscité beaucoup d'intérêt. Je suppose donc que je n'étais pas le seul à avoir ce problème.
Meer Borg

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.