"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).