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/63
oder ähnliches). Dieser Fehler gcc
ist 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 C
explizit einstellt ).
illegal seek
sieht aus wie die Antwort - das|pipe
,bash
auf das das ausgeführte Programm zeigt, ist keine suchbare Datei. Wahrscheinlich, wenn Sieecho data | command /dev/fd/0
bei 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.