Ini disebut substitusi proses.
3.5.6 Proses Pergantian
Substitusi proses memungkinkan input atau output proses dirujuk menggunakan nama file.
Daftar proses dijalankan secara asinkron, dan input atau outputnya muncul sebagai nama file. Nama file ini diteruskan sebagai argumen ke perintah saat ini sebagai hasil dari perluasan. Jika form>(list) digunakan, menulis ke file akan memberikan input untuk list. Jika formulir <(list) digunakan, file yang diteruskan sebagai argumen harus dibaca untuk mendapatkan output dari list. Perhatikan bahwa tidak boleh ada spasi yang muncul di antara
dan tanda kurung kiri, jika tidak, konstruk akan ditafsirkan sebagai pengalihan. Substitusi proses didukung pada sistem yang mendukung pipa bernama (FIFO) atau metode /dev/fd penamaan file terbuka.
Ini bukan hanya bash seperti yang awalnya muncul di ksh tetapi tidak dalam standar posix.
Di bawah tenda, substitusi proses memiliki dua implementasi. Pada sistem yang mendukung
/dev/fd
(kebanyakan sistem mirip Unix) bekerja dengan memanggilpipe(
) panggilan sistem, yang mengembalikan deskriptor file$fd
untuk pipa anonim baru, lalu buat string/dev/fd/$fd
, dan gantikan itu di baris perintah. Pada sistem tanpa/dev/fd
dukungan, itu memanggilmkfifo
dengan nama file sementara yang baru untuk membuat pipa bernama, dan gantikan nama file ini pada baris perintah.
Anda dapat memikirkan <( somecommand )
sebagai nama file dari file sementara yang berisi keluaran somecommand
. Dengan kata lain,
utility < <( somecommand )
adalah jalan pintas untuk
somecommand >tempfile
utility <tempfile
rm -f tempfile
Dan
utility <( somecommand )
adalah jalan pintas untuk
somecommand >tempfile
utility tempfile # notice the lack of redirection here (utility expected to read from "tempfile")
rm -f tempfile
Demikian juga >( somecommand )
dapat dianggap sebagai nama file dari file sementara yang akan dimasukkan ke dalam somecommand
pada input standarnya. Dengan kata lain,
utility > >( somecommand )
adalah jalan pintas untuk
utility >tempfile
somecommand <tempfile
rm -f tempfile
Dan
utility >( somecommand )
mungkin bisa menjadi jalan pintas untuk
mkfifo temppipe
somecommand <temppipe &
utility temppipe # utility is expected to write to "temppipe"
rm -f temppipe
(atau yang serupa)