A volte la sostituzione del processo non funzionerà come previsto. Ecco un esempio:
Ingresso:
gcc <(echo 'int main(){return 0;}')
Produzione:
/dev/fd/63: file not recognized: Illegal seek
collect2: error: ld returned 1 exit status
Ingresso:
Ma funziona come previsto se utilizzato con un comando diverso:
grep main <(echo 'int main(){return 0;}')
Produzione:
int main(){return 0;}
Ho notato simili errori con altri comandi (cioè il comando che si aspetta il file dalla sostituzione del processo non può usare /dev/fd/63o simile). Questo fallimento con gccè solo il più recente. Esiste una regola generale di cui dovrei essere consapevole per determinare quando la sostituzione del processo fallirà in questo modo e non dovrebbe essere utilizzata?
Sto usando questa versione BASH su Ubuntu 12.04 (l'ho visto anche in arch e debian):
GNU bash, versione 4.3.11 (1) -release (i686-pc-linux-gnu)
gcc -xc <(echo 'int main(){return 0;}')(che imposta Cesplicitamente la lingua ).
illegal seeksembra la risposta - quello|pipechebashpunta al programma eseguito non è un file ricercabile. probabilmente se non riesci con successoecho data | command /dev/fd/0a un programma, avrai una fortuna simile con<(cmd). Non fornisce un file su disco - sostituisce solo un argomento che punta a un descrittore di file di pipe.