Je me suis rendu compte que |
est utilisé pour envoyer les résultats de la première commande à l'autre. Je voudrais tuer tous les processus qui correspondent à un nom.
C'est ce que fait normalement pgrep:
$ pgrep name
5089
5105
Et plusieurs arguments semblent fonctionner avec kill
:
Sudo kill 5089 5105
Mais c'est faux:
pgrep name | kill
Alors, comment le faire correctement?
Essaye ça:
pgrep name | xargs kill
Si tu utilises pgrep name | kill
, la sortie de pgrep name
est un flux vers stdin de kill
. Parce que kill
ne lit pas les arguments de stdin, cela ne fonctionnera donc pas.
En utilisant xargs
, il construira des arguments pour kill
à partir de stdin. Exemple:
$ pgrep bash | xargs echo
5514 22298 23079
Cela devrait fonctionner:
pkill name
Je suggère également de lire la page de manuel.
Répondre au général plutôt qu'au spécifique ...
Les tuyaux permettent de transmettre la sortie d'un programme en tant qu'entrée à un autre programme.
Il semble que vous essayez d'utiliser la sortie d'un programme comme arguments de ligne de commande vers un autre programme, ce qui est différent.
Pour ce faire, utilisez substitution de commande .
Par exemple, si vous souhaitez exécuter
Sudo kill 5089 5105
Et vous avez une commande pgrep name
qui génère 5089 5105
Vous les mettez ensemble comme
Sudo kill $(pgrep name)