Lorsque j'essaie d'utiliser grep de cette manière:
service --status-all | grep network
Il répertorie toujours tous les services, même si je l'ai transféré dans grep
pour le restreindre uniquement à la chaîne "network"
Après le fait:
Essayez:
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 à l'identique.
Stdout reçoit le numéro 1 et stderr le numéro 2. Par défaut, les opérateurs de redirection, tels que >
, |
et <
, s'appliquent uniquement à stdout, numéro 1.
|&
redirige tous les deux stdout et stderr vers le processus sur le flux d'entrée standard (stdin), ce qui fait que grep
fonctionne comme prévu.
Je ne sais pas pourquoi service --status-all
imprime 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 la sortie standard est désactivée.
Vous devez rediriger le flux d’erreur standard ( 2
) vers sortie standard ( 1
):
service --status-all 2>&1 | grep network
L'opérateur >
redirige normalement vers un fichier (par exemple 2>/tmp/file
). Pour rediriger vers un autre flux à l'aide du descripteur , il doit être précédé de &
(notez qu'il n'y a pas d'espace entre les caractères).