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/63
lub podobne). Ta awaria gcc
jest 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 C
wyraźnie ustawia język ).
illegal seek
wygląda na to odpowiedź - w|pipe
którybash
wskazuje wykonywanego programu nie jest możliwy do przeszukania plików. prawdopodobnie jeśli nie uda ciecho data | command /dev/fd/0
się 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.