GNU/Linux >> Znalost Linux >  >> Linux

Jak funguje vzor <( cmd ) v bash?

Toto se nazývá substituce procesu.

3.5.6 Náhrada procesu

Substituce procesu umožňuje odkazovat na vstup nebo výstup procesu pomocí názvu souboru.

Seznam procesů běží asynchronně a jeho vstup nebo výstup se zobrazí jako název souboru. Tento název souboru je předán jako argument aktuálnímu příkazu v důsledku rozšíření. Pokud je použit formulář>(list), zápis do souboru poskytne vstup pro seznam. Pokud je použit formulář <(list), měl by být soubor předaný jako argument načten, aby se získal výstup seznamu. Všimněte si, že mezi a levou závorkou se nesmí objevit žádná mezera, jinak by byl konstrukt interpretován jako přesměrování. Náhrada procesů je podporována na systémech, které podporují pojmenované kanály (FIFO) nebo metodu /dev/fd pro pojmenování otevřených souborů.

Není to jen bash, jak se původně objevilo v ksh, ale není to ve standardu posix.

Substituce procesů má pod kapotou dvě implementace. Na systémech, které podporují /dev/fd (většina unixových systémů) funguje voláním pipe( ) systémové volání, které vrací deskriptor souboru $fd pro nový anonymní kanál a poté vytvoření řetězce /dev/fd/$fd a nahradí to na příkazovém řádku. Na systémech bez /dev/fd podpora, volá mkfifo s novým dočasným názvem souboru k vytvoření pojmenovaného kanálu a nahradí tento název souboru na příkazovém řádku.


Můžete si vzpomenout na <( somecommand ) jako název souboru dočasného souboru obsahujícího výstup somecommand . Jinými slovy,

utility < <( somecommand )

je zkratka pro

somecommand >tempfile
utility <tempfile
rm -f tempfile

A

utility <( somecommand )

je zkratka pro

somecommand >tempfile
utility tempfile  # notice the lack of redirection here (utility expected to read from "tempfile")
rm -f tempfile

Podobně >( somecommand ) může být chápáno jako název souboru dočasného souboru, který bude vložen do somecommand na jeho standardním vstupu. Jinými slovy,

utility > >( somecommand )

je zkratka pro

utility >tempfile
somecommand <tempfile
rm -f tempfile

A

utility >( somecommand )

by mohla být zkratka pro

mkfifo temppipe
somecommand <temppipe &
utility temppipe  # utility is expected to write to "temppipe"
rm -f temppipe

(nebo něco podobného)


Linux
  1. Jak Awk ‚!a[$0]++‘ funguje?

  2. Jak Sticky Bit funguje?

  3. Jak fungují vnitřnosti sudo?

  1. Ve skriptu Bash Jak funguje příkaz Continue s vestavěnými smyčkami?

  2. Jak funguje příkaz 'ls' v Linuxu/Unixu?

  3. Jak funguje cat << EOF v bash?

  1. Co je NGINX? Jak to funguje?

  2. Jak interně funguje copy_from_user z jádra Linuxu?

  3. Jak funguje příkaz ps?