Tato odpověď na Security StackExchange používá zajímavou syntaxi bash ke generování souboru v řádku:
openssl req -new -x509 -nodes -newkey ec:<(openssl ecparam -name secp384r1) -keyout cert.key -out cert.crt -days 3650
Tento kousek je obzvláště zajímavý:
<(openssl ecparam -name secp384r1)
Běží jen:
echo <(openssl ecparam -name secp384r1)
Dostávám zpět /dev/fd/63
Zdá se tedy, že to vytváří dočasný deskriptor souboru s obsahem souboru.
Jak se to nazývá?
Přijatá odpověď:
Říká se tomu substituce procesů a je to vlastnost bash, zsh a ksh (a možná i dalších, nevím). Není to POSIX a neměli byste to používat v přenosném kódu, ale je to velmi užitečné.
Zde je příslušná část manuálu bash:
3.5.6 Náhrada procesu
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ů. Má formu
z<(list)
nebo
>(list)
Seznam procesů se spouští se svým vstupem nebo výstupem připojeným k FIFO nebo nějakému souboru v /dev/fd. Název tohoto souboru je v důsledku rozšíření předán jako argument
aktuálnímu příkazu.
Pokud je použit tvar>(seznam), zápis do souboru poskytne vstup pro seznam. Pokud je použit <(list) formulář, měl by být soubor předaný jako argument
přečten, aby se získal výstup seznamu. Všimněte si, že mezia levou závorkou se nesmí objevit žádná mezera
, jinak by byl konstrukt
interpretován jako přesměrování.Je-li k dispozici, provádí se nahrazování procesu současně s
rozšířením parametrů a proměnných, nahrazením příkazů a aritmetickým
rozšířením.