J'ai remarqué que |
c'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?
pkill
. Et si cela n'existait pas,kill $(pgrep ...)
.man pgrep
. Le bouton downvote indique que c'est pour quand une question ne montre aucun effort de recherche, et je ne pouvais pas en voir dans votre question. Désolé si cela vous a paru dur.Réponses:
Essaye ça:
Si vous utilisez
pgrep name | kill
, la sortie depgrep name
est transmise à stdin dekill
. Parcekill
que ne lit pas les arguments de stdin, cela ne fonctionnera donc pas.En utilisant
xargs
, il construira des arguments pourkill
depuis stdin. Exemple:la source
Cela devrait fonctionner:
Je suggère également de lire la page de manuel.
la source
Répondre au général plutôt qu'au spécifique ...
Les canaux permettent de transmettre la sortie d'un programme en entrée à un autre programme.
Il semble que vous essayez d'utiliser la sortie d'un programme comme arguments de ligne de commande pour un autre programme, ce qui est différent.
Pour ce faire, utilisez la substitution de commandes .
Par exemple, si vous souhaitez exécuter
Et vous avez une commande
pgrep name
qui sort5089 5105
Vous les mettez ensemble comme
la source