Saya telah menjelajahi hampir semua pertanyaan serupa yang tersedia , tetapi tidak berhasil.
Izinkan saya menjelaskan masalah secara rinci:
Saya menjalankan beberapa skrip yang tidak dijaga dan ini dapat menghasilkan output standar dan garis kesalahan standar, saya ingin menangkap mereka dalam urutan yang tepat seperti yang ditampilkan oleh terminal emulator dan kemudian menambahkan awalan seperti "STDERR:" dan "STDOUT:" kepada mereka.
Saya telah mencoba menggunakan pipa dan bahkan pendekatan berbasis epoll pada mereka, tetapi tidak berhasil. Saya pikir solusi dalam penggunaan pty, meskipun saya tidak menguasai hal itu. Saya juga telah mengintip kode sumber VTE Gnome , tetapi itu belum banyak produktif.
Idealnya saya akan menggunakan Go daripada Bash untuk mencapai ini, tetapi saya belum bisa. Sepertinya pipa otomatis melarang menjaga urutan garis yang benar karena buffering.
Adakah yang bisa melakukan hal serupa? Atau itu tidak mungkin? Saya pikir jika terminal emulator dapat melakukannya, maka itu tidak - mungkin dengan membuat program C kecil yang menangani PTY (s) berbeda?
Idealnya saya akan menggunakan input asinkron untuk membaca 2 aliran ini (STDOUT dan STDERR) dan kemudian mencetak ulang kedua kebutuhan saya, tetapi urutan input sangat penting!
CATATAN: Saya mengetahui stderred tetapi tidak berfungsi untuk saya dengan skrip Bash dan tidak dapat dengan mudah diedit untuk menambahkan awalan (karena pada dasarnya membungkus banyak syscall).
Pembaruan: ditambahkan di bawah dua inti
- Contoh program yang menghasilkan stdout / stderr campuran
- Output yang diharapkan dari program di atas
(penundaan acak sub-detik dapat ditambahkan dalam skrip sampel yang saya berikan untuk membuktikan hasil yang konsisten)
Pembaruan: solusi untuk pertanyaan ini juga akan menyelesaikan pertanyaan lain ini , seperti yang ditunjukkan @Gilles. Namun saya sampai pada kesimpulan bahwa tidak mungkin melakukan apa yang diminta di sana-sini. Ketika menggunakan 2>&1
kedua aliran digabung dengan benar pada tingkat pty / pipa, tetapi untuk menggunakan aliran secara terpisah dan dalam urutan yang benar seseorang memang harus menggunakan pendekatan stderred yang melibatkan pengait syscall dan dapat dilihat sebagai kotor dalam banyak hal.
Saya akan bersemangat untuk memperbarui pertanyaan ini jika seseorang dapat menolak hal di atas.