Czasami podstawienie procesu nie będzie działać zgodnie z oczekiwaniami. Oto przykład:
Wkład:
gcc <(echo 'int main(){return 0;}')
Wydajność:
/dev/fd/63: file not recognized: Illegal seek
collect2: error: ld returned 1 exit status
Wkład:
Ale działa zgodnie z oczekiwaniami, gdy jest używany z innym poleceniem:
grep main <(echo 'int main(){return 0;}')
Wydajność:
int main(){return 0;}
Zauważyłem podobne niepowodzenia w przypadku innych poleceń (tj. Polecenie oczekujące pliku z podstawienia procesu nie może używać /dev/fd/63lub podobne). Ta awaria gccjest właśnie najnowsza. Czy istnieje jakaś ogólna zasada, o której powinienem wiedzieć, aby określić, kiedy proces podstawienia zakończy się niepowodzeniem w ten sposób i nie powinien być stosowany?
Używam tej wersji BASH na Ubuntu 12.04 (widziałem to również w arch i debian):
GNU bash, wersja 4.3.11 (1) -release (i686-pc-linux-gnu)
gcc -xc <(echo 'int main(){return 0;}')(co Cwyraźnie ustawia język ).
illegal seekwygląda na to odpowiedź - w|pipektórybashwskazuje wykonywanego programu nie jest możliwy do przeszukania plików. prawdopodobnie jeśli nie uda ciecho data | command /dev/fd/0się z programem, będziesz miał podobne szczęście w /<(cmd). Nie zapewnia pliku na dysku - po prostu zastępuje argument wskazujący deskryptor pliku potoku.