Come si chiama la sintassi bash '<(contenuto del file)'?


25

Questa risposta su Security StackExchange utilizza un'interessante sintassi bash per generare un file in linea:

openssl req -new -x509 -nodes -newkey ec:<(openssl ecparam -name secp384r1) -keyout cert.key -out cert.crt -days 3650

Questo bit è particolarmente interessante:

<(openssl ecparam -name secp384r1)

In esecuzione solo:

echo <(openssl ecparam -name secp384r1)

torno /dev/fd/63

Quindi questo sembra creare un descrittore di file temporaneo con il contenuto del file.

Come si chiama?


3
Si noti che il "file" risultante è in realtà una named pipe e alcuni programmi non li supportano come argomenti di file. Esempio: git diff --no-index file1 <(cat file2)non riuscirà con: error: /dev/fd/63: unsupported file type. Potresti anche vedere error: readlink("/dev/fd/63"): No such file or directoryse l'implementazione crea un link simbolico alla pipe (per qualche motivo appare come un link non funzionante).
Kelvin,

Risposte:


35

Si chiama sostituzione di processo ed è una caratteristica di bash, zsh e ksh (e forse altri, non lo so). Non è POSIX e non dovresti usarlo nel codice portatile, ma è molto utile.

Ecco la sezione pertinente del manuale di bash:

3.5.6 Sostituzione del processo

La sostituzione del processo è supportata su sistemi che supportano named pipe (FIFO) o il metodo / dev / fd di denominazione dei file aperti. Prende la forma di

  <(list) 

o

  >(list) 

L'elenco dei processi viene eseguito con i relativi input o output collegati a un FIFO o ad alcuni file in / dev / fd. Il nome di questo file viene passato come argomento al comando corrente come risultato dell'espansione. Se viene utilizzato il modulo> (elenco), la scrittura nel file fornirà l'input per l'elenco. Se viene utilizzato il modulo <(elenco), il file passato come argomento deve essere letto per ottenere l'output dell'elenco. Si noti che non può apparire spazio tra la <o> e la parentesi sinistra, altrimenti il ​​costrutto verrebbe interpretato come un reindirizzamento.

Se disponibile, la sostituzione del processo viene eseguita contemporaneamente all'espansione dei parametri e delle variabili, alla sostituzione dei comandi e all'espansione aritmetica.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.