¿Cómo se llama la sintaxis bash '<(contenido del archivo)'?


25

Esta respuesta en Security StackExchange utiliza una sintaxis bash interesante para generar un archivo en línea:

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

Este bit es particularmente interesante:

<(openssl ecparam -name secp384r1)

Corriendo solo:

echo <(openssl ecparam -name secp384r1)

Regreso /dev/fd/63

Entonces esto parece hacer un descriptor de archivo temporal con el contenido del archivo.

¿Como se llama esto?


3
Tenga en cuenta que el "archivo" resultante es en realidad una canalización con nombre, y algunos programas no los admiten como argumentos de archivo. Ejemplo: git diff --no-index file1 <(cat file2)fallará con: error: /dev/fd/63: unsupported file type. También puede ver error: readlink("/dev/fd/63"): No such file or directorysi la implementación crea un enlace simbólico a la tubería (aparece como un enlace roto por alguna razón).
Kelvin

Respuestas:


35

Se llama sustitución de proceso y es una característica de bash, zsh y ksh (y posiblemente otros, no lo sé). No es POSIX y no debe usarlo en código portátil, pero es muy útil.

Aquí está la sección relevante del manual de bash:

3.5.6 Sustitución del proceso

La sustitución de procesos es compatible con sistemas que admiten canalizaciones con nombre (FIFO) o el método / dev / fd para nombrar archivos abiertos. Toma la forma de

  <(list) 

o

  >(list) 

La lista de procesos se ejecuta con su entrada o salida conectada a un FIFO o algún archivo en / dev / fd. El nombre de este archivo se pasa como argumento al comando actual como resultado de la expansión. Si se usa el formulario> (lista), escribir en el archivo proporcionará información para la lista. Si se usa la forma <(lista), el archivo pasado como argumento debe leerse para obtener el resultado de la lista. Tenga en cuenta que no puede aparecer espacio entre el <o> y el paréntesis izquierdo, de lo contrario la construcción se interpretaría como una redirección.

Cuando está disponible, la sustitución del proceso se realiza simultáneamente con la expansión de parámetros y variables, la sustitución de comandos y la expansión aritmética.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.