Neredeyse incelemiş bulunuyoruz tüm mevcut benzer soruları boşuna.
Sorunu ayrıntılı olarak anlatayım:
Bazı katılımsız komut dosyaları çalıştırıyorum ve bunlar standart çıktı ve standart hata satırları üretebiliyorum, bunları bir terminal emülatörü tarafından görüntülendikleri şekilde tam sırada yakalamak ve daha sonra bunlara "STDERR:" ve "STDOUT:" gibi bir önek eklemek istiyorum.
Kullanıma hazır olmamak için boruları ve hatta epoll tabanlı yaklaşımı kullanmayı denedim. Ben bunda usta olmasam da çözümün pty kullanımında olduğunu düşünüyorum. Ayrıca Gnome’un VTE’nin kaynak kodunu da inceledim, ancak bu çok verimli olmadı.
İdeal olarak, bunu başarmak için Bash yerine Go'yu kullanırdım ama başaramadım. Tamponlama nedeniyle boruların doğru bir sıra sırasını korumayı otomatik olarak yasakladığı görülüyor.
Birisi benzer bir şey yapabildi mi? Yoksa bu imkansız mı? Bence bir terminal emülatörü bunu yapabilirse, o zaman değil - belki de PTY (leri) farklı şekilde ele alan küçük bir C programı oluşturarak mı?
İdeal olarak, bu 2 akışı okumak için zaman uyumsuz bir girdi kullanırdım (STDOUT ve STDERR) ve sonra ihtiyaçlarımı ikinci olarak yeniden yazdırırım, ancak girdi sırası çok önemli!
NOT: Stderred'in farkındayım ancak bu benim için Bash betikleriyle çalışmıyor ve bir önek eklemek için kolayca düzenlenemez (temelde bol miktarda sistem çağrısında bulunur).
Güncelleme: iki listenin altına eklendi
(Tutarlı bir sonuç elde etmek için verilen örnek betiğe ikinci alt rasgele gecikmeler eklenebilir)
Güncelleme: Bu sorunun çözümü de çözecek bu diğer soru @Gilles belirttiği gibi,. Ancak burada ve orada ne istendiğini yapmanın mümkün olmadığı sonucuna vardım . Her 2>&1
iki akış kullanıldığında, pty / pipe düzeyinde doğru şekilde birleştirilir, ancak akışları ayrı ayrı ve doğru sırada kullanmak için, aslında, sistem çağrısı çekmeyi içeren ve birçok yönden kirli olarak görülebilen bir stderred yaklaşımı kullanılmalıdır .
Birisi yukarıdakileri engelleyebilirse bu soruyu güncellemek için can atıyorum.