Mir ist aufgefallen, dass dies |
dazu verwendet wird, die Ergebnisse des ersten Befehls an den nächsten zu senden. Ich möchte alle Prozesse beenden, die einem Namen entsprechen.
Das macht pgrep normalerweise:
$ pgrep name
5089
5105
Und mehrere Argumente scheinen zu funktionieren mit kill
:
sudo kill 5089 5105
Das ist aber falsch:
pgrep name | kill
Wie macht man es also richtig?
Antwort1
Versuche dies:
pgrep name | xargs kill
Wenn Sie verwenden pgrep name | kill
, wird die Ausgabe von pgrep name
an die Standardeingabe von weitergeleitet kill
. Da kill
keine Argumente von der Standardeingabe gelesen werden, funktioniert dies nicht.
Mit xargs
werden Argumente für kill
aus stdin erstellt. Beispiel:
$ pgrep bash | xargs echo
5514 22298 23079
Antwort2
Das sollte funktionieren:
pkill name
Ich empfehle außerdem, die Manpage zu lesen.
Antwort3
Um eher allgemein als spezifisch zu antworten …
Pipes dienen zur Weitergabe der Ausgabe eines Programms alsEingangzu einem anderen Programm.
Es sieht so aus, als ob Sie versuchen, die Ausgabe eines Programms zu verwenden alsKommandozeilenargumentezu einem anderen Programm, das anders ist.
Verwenden Sie dazuBefehlsersetzung.
Wenn Sie beispielsweise
sudo kill 5089 5105
Und Sie haben einen Befehl pgrep name
, der ausgibt5089 5105
Man setzt sie zusammen wie
sudo kill $(pgrep name)