Kadang-kadang proses substitusi tidak akan berfungsi seperti yang diharapkan. Berikut ini sebuah contoh:
Memasukkan:
gcc <(echo 'int main(){return 0;}')
Keluaran:
/dev/fd/63: file not recognized: Illegal seek
collect2: error: ld returned 1 exit status
Memasukkan:
Tetapi berfungsi seperti yang diharapkan ketika digunakan dengan perintah yang berbeda:
grep main <(echo 'int main(){return 0;}')
Keluaran:
int main(){return 0;}
Saya telah memperhatikan kegagalan yang sama dengan perintah lain (yaitu perintah yang mengharapkan file dari proses substitusi tidak dapat digunakan /dev/fd/63
atau serupa). Kegagalan dengan gcc
ini adalah yang terbaru. Apakah ada beberapa aturan umum yang harus saya waspadai untuk menentukan kapan proses penggantian akan gagal dengan cara ini dan tidak boleh digunakan?
Saya menggunakan versi BASH ini di Ubuntu 12.04 (Saya juga melihat ini di arch dan debian):
GNU bash, versi 4.3.11 (1) -release (i686-pc-linux-gnu)
gcc -xc <(echo 'int main(){return 0;}')
(yang mengatur bahasa C
secara eksplisit).
illegal seek
sepertinya jawabannya -|pipe
yangbash
menunjukkan program yang dijalankan bukan file yang bisa dicari. mungkin jika Anda tidak dapat berhasilecho data | command /dev/fd/0
di suatu program maka Anda akan memiliki keberuntungan yang sama dengan /<(cmd)
. Itu tidak menyediakan file pada disk - itu hanya menggantikan argumen yang menunjuk ke descriptor file pipa.