Apakah ada alat yang akan mengambil input dari banyak file atau pipa dan menulisnya ke stdout, tanpa memblokir bacaan, sehingga masing-masing jalur input keluar utuh? Saya pada dasarnya ingin multiplex banyak input ke satu output tanpa garis clobbering.
$ combine file1 <(prog2) ... > nice-output.txt
- Saya tidak peduli dengan urutan output
- Seharusnya tidak memblokir selama beberapa input memiliki data
- Itu harus efisien (yaitu, saya dapat meng-downvote Perl Anda satu-liner;)
-L
untuk menjalankan perintah dan menggabungkan output dengan aliran saat ini dan-a
untuk menulis output ke file. Saya akan mencari lagi besok. Jika Anda memberikan contoh yang lebih terperinci, saya akan mencoba mengerjakannya.Jika proses menulis baris dalam satu
write
panggilan, yang membutuhkan proses untuk menggunakan buffer garis (biasanya dimatikan jika output standar mereka bukan terminal), Anda bisa mengarahkan semuanya ke pipa.Jika proses hanya melakukan buffering baris saat menulis ke terminal, cara mudah adalah menggunakan
script
. Agak canggung: hanya bisa menulis ke file.Jika program menulis garis panjang atau tidak menggunakan buffer garis, pendekatan ini tidak akan berhasil. Anda akan memerlukan program kolektor yang membaca dan menyangga baris dari setiap input secara terpisah dan melakukan sinkronisasi pada akhir baris. Tidak ada utilitas standar dengan fungsi ini. Saya menyarankan saran Caleb
multitail
kedua .Berikut ini adalah skrip Python yang membaca baris yang dihasilkan oleh beberapa perintah dan meludahkannya pada output standar, tanpa memecah baris. Saya belum mengujinya banyak, jadi pengguna peringatan. Saya belum membandingkannya sama sekali.
Penggunaan sampel:
sumber
Ya multitail tampaknya terikat pada gagasan "jendela" sebagai bagian dari terminal; Saya tidak bisa membuatnya bermain bagus sebagai komponen pipa.
Jadi terlihat seperti kita hafta lakukan sendiri ini retak buku-buku jari
Ahhh itu terasa enak.
(catatan: ini diuji pada sekitar dua set input. bug mungkin ada atau tidak ada)
sumber