Maaf jika ini pertanyaan konyol tapi saya mencoba menyelesaikan sesuatu seperti ini tetapi dalam satu baris:
$ prog1 | prog2
$ prog1 | prog3
Jadi, pada dasarnya saya ingin menjalankan prog1 dan pipa output ke prog2 dan prog3 secara terpisah (bukan pipa berantai). Pada awalnya, saya mencoba menggunakan tee tapi itu sepertinya tidak benar karena itu membuang output ke file (yang bukan yang saya inginkan).
$ prog1 | tee prog2 | prog3 # doesn't work - creates file "prog2"
Pada titik tertentu, saya mungkin ingin memperpanjang ini untuk menyalurkan output ke lebih dari dua program tapi saya baru mulai sederhana untuk saat ini.
$ prog1 | prog2
$ prog1 | prog3
$ prog1 | prog4
...
Jawaban:
Substitusi proses.
sumber
Mirip dengan jawaban Ignacio, Anda bisa menggunakan pipa bernama sementara menggunakan
mkfifo(1)
.Ini sedikit lebih bertele-tele, tetapi itu akan bekerja pada sistem yang tidak memiliki substitusi proses
dash
. Thesleep 1
adalah untuk menangani kondisi ras.sumber
Ada PTT utilitas kecil yang melakukan pekerjaan:
Alih-alih menulis ke file, PTee menulis ke semua fds yang diberikan pada baris perintah.
PTee adalah bagian dari pipexec .
sumber
Anda tidak memerlukan bashisme atau file khusus apa pun - tidak di Linux:
Saya membintangi hasil yang
grep
disorot untuk saya menunjukkan bahwa mereka bukan hanya tiga hasil dari aliran yang sama, tetapi mereka juga hasil darigrep
kecocokan proses yang terpisah .sumber