В некоторых случаях процесс замены не будет работать должным образом. Вот пример:
Входные данные:
gcc <(echo 'int main(){return 0;}')
Выход:
/dev/fd/63: file not recognized: Illegal seek
collect2: error: ld returned 1 exit status
Входные данные:
Но он работает, как и ожидалось, когда используется с другой командой:
grep main <(echo 'int main(){return 0;}')
Выход:
int main(){return 0;}
Я заметил подобные сбои с другими командами (то есть команда, ожидающая файл от подстановки процесса, не может использоваться /dev/fd/63или подобна). Этот сбой gccтолько самый последний. Есть ли какое-то общее правило, о котором я должен знать, чтобы определить, когда подстановка процесса потерпит неудачу и не должна использоваться?
Я использую эту версию BASH в Ubuntu 12.04 (я также видел это в arch и debian):
GNU bash, версия 4.3.11 (1) -релиз (i686-pc-linux-gnu)
gcc -xc <(echo 'int main(){return 0;}')(который устанавливает язык Cявно).
illegal seekвыглядит как ответ -|pipeэтоbashуказывает на то, что исполняемая программа не является доступным для поиска файлом. вероятно, если вы не можете успешноecho data | command /dev/fd/0в программе, то вам повезет с /<(cmd). Он не предоставляет файл на диске - он просто заменяет аргумент, который указывает на дескриптор файла канала.