Gelegentlich funktioniert die Prozessersetzung nicht wie erwartet. Hier ist ein Beispiel:
Eingang:
gcc <(echo 'int main(){return 0;}')
Ausgabe:
/dev/fd/63: file not recognized: Illegal seek
collect2: error: ld returned 1 exit status
Eingang:
Aber es funktioniert wie erwartet, wenn es mit einem anderen Befehl verwendet wird:
grep main <(echo 'int main(){return 0;}')
Ausgabe:
int main(){return 0;}
Ich habe ähnliche Fehler bei anderen Befehlen festgestellt (dh der Befehl, der die Datei von der Prozessersetzung erwartet, kann nicht verwendet werden /dev/fd/63oder ähnliches). Dieser Fehler gccist nur der jüngste. Gibt es eine allgemeine Regel, die ich beachten sollte, um festzustellen, wann die Prozessersetzung auf diese Weise fehlschlägt und nicht verwendet werden sollte?
Ich benutze diese BASH-Version unter Ubuntu 12.04 (ich habe dies auch in Arch und Debian gesehen):
GNU bash, Version 4.3.11 (1) -release (i686-pc-linux-gnu)
gcc -xc <(echo 'int main(){return 0;}')(was die Sprache Cexplizit einstellt ).
illegal seeksieht aus wie die Antwort - das|pipe,bashauf das das ausgeführte Programm zeigt, ist keine suchbare Datei. Wahrscheinlich, wenn Sieecho data | command /dev/fd/0bei einem Programm nicht erfolgreich sein können, haben Sie ähnliches Glück w /<(cmd). Es wird keine Datei auf der Festplatte bereitgestellt. Es wird lediglich ein Argument ersetzt, das auf einen Pipe-Dateideskriptor verweist.