"Eingabe" und "Befehlszeilenargumente" sind verschiedene Dinge.
rm
entfernt die als Argumente angegebenen Dateien.
Eine Pipe leitet die Ausgabe des linken Befehls an die Eingabe des rechten Befehls um. Es wirkt sich nicht auf die Befehlszeilenargumente des Programms auf der rechten Seite aus.
Um das zu tun, was Sie versuchen, versuchen Sie es mit xargs
zum Konvertieren der Standardeingabe in Befehlszeilenargumente zum Ausführen eines Programms. Das ist seine Aufgabe.
which gem | xargs rm
entfernt beispielsweise den gem
in Ihrem PFAD.
rm
nimmt keine Eingaben entgegen, sondern Argumente. Diese sind unterschiedlich. Argumente sind die Schalter und Dateinamen usw., die Sie einem Programm auf der Befehlszeile geben, um sein Verhalten zu beeinflussen. Eingabe sind die Daten, mit denen das Programm arbeitet. Beispiel:grep
akzeptiert sowohl Eingaben als auch Argumente:
grep "foo" file.txt
Dort gibt es zwei Argumente "foo"
und file.txt
. Die Eingabe ist der Inhalt von file.txt
, nicht die Zeichenfolge file.txt
selbst. Da grep Eingaben akzeptiert, können Sie es mit Pipes verwenden:
cat file.txt | grep "foo"
erzeugt die gleiche Ausgabe, da cat file.txt
nimmt als Argument und erzeugt den Inhalt von file.txt
als Ausgang. Diese Ausgabe wird dann an grep weitergeleitet, was den gleichen Effekt hat, als ob grep die Datei selbst öffnen würde, wie im ersten Beispiel.
Wenn Sie die Ausgabe eines Programms als Argument verwenden möchten zu einem anderen verwenden Sie Backticks:
rm `which gem`
oder diese alternative (bash-spezifische) Syntax:
rm $(which gem)
Bearbeiten:oder xargs
wie ein anderer Antworter betont. Viele Möglichkeiten, eine Katze mit einer Befehlszeile zu häuten.
Sehen Sie sich man
an Seiten mit Befehlen, an denen Sie interessiert sind. Diese Programme zeigen an, dass sie ab stdin
lesen (versuchen Sie man grep
für einen beliebten Befehl, der stdin liest).