En ocasiones, la sustitución del proceso no funcionará como se esperaba. Aquí hay un ejemplo:
Entrada:
gcc <(echo 'int main(){return 0;}')
Salida:
/dev/fd/63: file not recognized: Illegal seek
collect2: error: ld returned 1 exit status
Entrada:
Pero funciona como se esperaba cuando se usa con un comando diferente:
grep main <(echo 'int main(){return 0;}')
Salida:
int main(){return 0;}
He notado fallas similares con otros comandos (es decir, el comando que espera que el archivo de la sustitución del proceso no pueda usar /dev/fd/63
o similar). Este fracaso con gcc
es solo el más reciente. ¿Hay alguna regla general que deba tener en cuenta para determinar cuándo la sustitución del proceso fallará de esta manera y no debería usarse?
Estoy usando esta versión de BASH en Ubuntu 12.04 (también lo he visto en arch y debian):
GNU bash, versión 4.3.11 (1) -release (i686-pc-linux-gnu)
gcc -xc <(echo 'int main(){return 0;}')
(que establece el idioma C
explícitamente).
illegal seek
parece la respuesta: lo|pipe
quebash
apunta al programa ejecutado no es un archivo buscable. Probablemente si no puede tener éxitoecho data | command /dev/fd/0
en un programa, entonces tendrá una suerte similar w /<(cmd)
. No proporciona un archivo en el disco, solo sustituye un argumento que apunta a un descriptor de archivo de tubería.