"Vstup" a "argumenty příkazového řádku" jsou různé věci.
rm odstraní soubory poskytnuté jako argumenty.
Roura přesměruje výstup levého příkazu na vstup pravého příkazu. Nemá vliv na argumenty příkazového řádku programu vpravo.
Chcete-li provést to, o co se pokoušíte, zkuste použít xargs převést standardní vstup na argumenty příkazového řádku pro spuštění programu. To je jeho práce.
which gem | xargs rm , například odstraní gem ve vaší PATH.
rm nebere vstup, vyžaduje argumenty. Tyhle jsou různé. Argumenty jsou přepínače a názvy souborů a tak dále, které zadáte programu na příkazovém řádku, abyste ovlivnili jeho chování. Vstup jsou data, se kterými program pracuje. Například grep přebírá vstup i argumenty:
grep "foo" file.txt
Jsou tam dva argumenty "foo" a file.txt . vstup je obsah z file.txt , nikoli řetězec file.txt sám. Protože grep přebírá vstup, můžete jej použít s rourami:
cat file.txt | grep "foo"
produkuje stejný výstup, protože cat bere file.txt jako argument a vytvoření obsahu z file.txt jako výstup. Tento výstup je pak přenesen do grep, což má stejný efekt, jako kdyby grep otevřel samotný soubor, jako v prvním příkladu.
Pokud chcete použít výstup jednoho programu jako argument k jinému, použijete zpětná označení:
rm `which gem`
nebo tato alternativní syntaxe (specifická pro bash):
rm $(which gem)
Upravit:nebo xargs jak podotýká další respondent. Mnoho způsobů, jak stáhnout kočku z kůže pomocí příkazového řádku.
Podívejte se na man stránky příkazů, které vás zajímají. Tyto programy budou indikovat, že čtou z stdin (zkuste man grep pro oblíbený příkaz, který čte stdin).