Esta no es una entrada estándar múltiple. Este es un bash'ismo llamado 'Sustitución de procesos'http://tldp.org/LDP/abs/html/process-sub.html
Crea un pseudo archivo (/dev/fd/something
) para cada sustitución. Es bastante útil. El comando solo puede leerse como una secuencia, lo que significa que no puede ir y venir con fseek. Necesita leerlo como un flujo de bytes, como una tubería.
BONUS Respuesta
No necesita hacer demasiado para usar esto. En lo que respecta a su secuencia de comandos, obtiene un nombre de archivo válido en la línea de comando, que se puede abrir () como cualquier otra cosa. Como han dicho otros, verías diff /dev/fd/XX /dev/fd/YY
. Si hace una estadística () en cualquiera de estos pseudoarchivos, verá que es una canalización con nombre, y debe tratarla con semántica de canalización, es decir, sin fseek() o ftell(). Si realiza una prueba stat() para ver explícitamente si es un archivo (por ejemplo, [ -f $1 ]
) esto será break:después de todo, esto se implementa como una canalización con nombre.
<(...)
hace sustitución de procesos en bash. La salida del proceso en los paréntesis se envía a un descriptor de archivo adicional más allá de los 3 normales, y se devuelve un nombre de archivo correspondiente a ese descriptor de archivo. De esta forma, la salida de un comando se puede tratar como un nombre de archivo para pasar a otro comando.
Hay uno stdin
y uno stdout
para cada proceso . Por lo general, están conectados al terminal, pero se pueden redirigir por separado.
En el ejemplo, hay dos wget
procesos involucrados, cada uno de los cuales tiene su propio stdin
y stdout
. Cada wget
el proceso escribe en -
, que es su stdout
. Entonces bash
sustitución de proceso de <(...)
conecta el stdout
del proceso a un pseudo-archivo único, desde el cual diff
puedo leer. ¡Tenga en cuenta que las dos sustituciones de procesos generan dos pseudoarchivos diferentes! Por lo tanto, diff
ve algo como:
diff /dev/fd/XX /dev/fd/YY
donde el stdout
de wget -q -O - URL1
está conectado a /dev/fd/XX
, y el stdout
de wget -q -O - URL2
a /dev/fd/YY
.