GNU/Linux >> Znalost Linux >  >> Linux

Pochopení toho, jak jsou vstupy odesílány do potrubí v Bash

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


Linux
  1. Jak používat příkazy historie Bash

  2. Jak napsat smyčku v Bash

  3. Zkontrolujte, zda jsou ve skriptu bash uvedeny alespoň dva argumenty

  1. Jak používat vstupy ve skriptech shellu

  2. Jak ladit Bash skript?

  3. Jak udělat `hlavu` a `ocas` na vstupu odděleném nulou v Bash?

  1. Jak zjistit Bash>=4.0?

  2. Bash Script - Jak číst uživatelský vstup

  3. bash:jak předat argumenty příkazového řádku obsahující speciální znaky