Jika saya mengerti dengan benar, Anda mencari yang setara tee file1 file2 file3
, tetapi daripada menulis data yang sama ke tiga file file1
, file2
dan file3
, Anda ingin menyalurkan data yang sama ke dalam tiga perintah cmd1
, cmd2
dan cmd3
, yaitu
… | ??? cmd1 cmd2 cmd3
harus setara dengan
… | cmd1 &
… | cmd2 &
… | cmd3 &
kecuali itu …
hanya akan dieksekusi sekali.
Ada dua cara untuk melakukan itu.
Ksh93, substitusi proses dukungan bash dan zsh . Ini adalah generalisasi dari pipa yang memungkinkan argumen dari suatu perintah menjadi file yang, ketika ditulis untuk, meneruskan data sebagai input ke suatu perintah (ada juga varian input yang, ketika dibaca dari, memperoleh output data dengan suatu perintah) . Itu adalah,
echo hello | tee >(cmd1)
mencetak hello
ke output standar dan selain itu dijalankan cmd1
dengan hello
input.
Jadi misalnya, jika Anda ingin menduplikasi input somecommand
dan meneruskannya ke keduanya cmd1
dan cmd2
, Anda bisa menggunakannya
somecommand | tee >(cmd1) | cmd2
Jika shell Anda tidak mendukung substitusi proses, Anda dapat menggunakan pipa bernama. Lihat jawaban Arcege untuk cara kerjanya. Pipa yang dinamai kurang nyaman daripada substitusi proses karena Anda harus membuatnya dan menghapusnya, dan memulai dan menyinkronkan proses secara manual. Mereka memiliki keuntungan menjadi sepenuhnya portabel, sedangkan tidak semua shell mendukung proses penggantian. Mereka juga dapat digunakan dalam skenario selain yang proses substitusi adalah untuk.
Di bawah tenda, pada beberapa sistem, proses penggantian menggunakan pipa bernama secara internal. Pada sebagian besar sistem, ini bergantung pada file bernama yang mewakili deskriptor file .