В некоторых случаях процесс замены не будет работать должным образом. Вот пример:
Входные данные:
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)
. Он не предоставляет файл на диске - он просто заменяет аргумент, который указывает на дескриптор файла канала.