Ich habe bemerkt, dass |
verwendet wird, um Ergebnisse des ersten Befehls an den anderen 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 kill
:
sudo kill 5089 5105
Das ist aber falsch:
pgrep name | kill
Also, wie macht man das richtig?
pkill
. Und wenn das nicht gäbe,kill $(pgrep ...)
.man pgrep
. Der Downvote-Button zeigt an, dass für eine Frage keine Nachforschungen anstehen und ich in Ihrer Frage keine gefunden habe. Tut mir leid, wenn das hart schien.Antworten:
Versuche dies:
Wenn Sie verwenden
pgrep name | kill
, wird die Ausgabe vonpgrep name
auf stdin von eingespeistkill
. Dakill
stdin keine Argumente liest, funktioniert dies nicht.Mit
xargs
wird Argumente fürkill
from stdin erzeugt. Beispiel:quelle
Das sollte funktionieren:
Ich schlage auch vor, die Manpage zu lesen.
quelle
Um eher auf das Allgemeine als auf das Besondere zu antworten ...
Pipes dienen dazu, die Ausgabe eines Programms als Eingabe an ein anderes Programm weiterzuleiten.
Es sieht so aus, als würden Sie versuchen, die Ausgabe eines Programms als Befehlszeilenargumente für ein anderes Programm zu verwenden.
Verwenden Sie dazu die Befehlssubstitution .
Zum Beispiel, wenn Sie ausführen möchten
Und Sie haben einen Befehl
pgrep name
, der ausgibt5089 5105
Sie setzen sie gerne zusammen
quelle