Ich werde versuchen, den folgenden Teil Ihrer Frage zu analysieren:
würde stattdessen so aussehen:
~ $ irgendein Befehl
einige nützliche Ausgabeinformationen |
mehr Leistung | FEHLER: ein Fehler
eine andere Nachricht | Ein Fehler ist aufgetreten
~ $
Wenn man aufteilen wollte, was Sie wollen, ist:
1) Der stdout
Stream würde nicht jede Zeile mit einem, CR LF
sondern mit einem '|' Charakter. Dies würde die beiden Ströme natürlich nicht zusammen ausrichten, und eine Ausrichtung kommt nicht in Frage, da die Länge zukünftiger Zeilen, die zu den Strömen hinzugefügt werden, vorhergesagt werden müsste stdout
, was natürlich unmöglich ist.
2) Unter der Annahme, dass wir die Ausrichtung vergessen haben, geben wir das Ergebnis einfach aus, stderr
nachdem es von einer Pipeline verarbeitet wurde, die am Anfang jeder Zeile "ERROR:" hinzufügt. Ich nehme an, dass dies recht einfach ist, indem Sie ein einfaches Skript erstellen und sicherstellen, dass es stderr
immer durch dieses Skript geht.
Aber das würde eine Ausgabe wie diese erzeugen:
~ $ irgendein Befehl
einige nützliche Ausgabeinformationen |
mehr Leistung | FEHLER: ein Fehler
eine andere Nachricht | Ein Fehler ist aufgetreten
Was ist nicht wirklich hilfreich, oder? Auch ich glaube nicht, es ist das, was du auch suchst!
Das Problem mit der anfänglichen Frage ist meiner Meinung nach, dass Sie die serielle Natur jeder in einem Stream angehängten Zeile nicht berücksichtigen, in Verbindung mit der Tatsache, dass beide Streams möglicherweise asynchron geschrieben werden.
Ich glaube, die nächstmögliche Lösung wäre die Verwendung ncurses
.
Sehen.
[ http://www.tldp.org/HOWTO/html_single/NCURSES-Programming-HOWTO/]
[ http://invisible-island.net/ncurses/ncurses-intro.html#updating]
Um das zu tun, was Sie wollen, müssen Sie beide Streams puffern und sie kombinieren, um einen dritten Puffer zu erstellen, der Elemente aus beiden Puffern übernimmt. Entleeren Sie dann den dritten Puffer im Terminalbildschirm, indem Sie den Terminalbildschirm löschen und ihn bei jedem Wechsel des dritten Puffers neu streichen. Aber so ncurses
funktioniert es. Warum also das Rad neu erfinden und nicht von dort aufgreifen?
In jedem Fall müssten Sie übernehmen, dass der Terminalbildschirm komplett lackiert ist ! Richten Sie den Text in der neu gedruckten Version des Bildschirms nach Ihren Wünschen aus. Ähnlich wie ein Videospiel mit Terminalcharakteren.
Ich hoffe, meine Antwort wird hilfreich sein, um die Grenzen Ihrer Sucht zu klären ...
Entschuldigen Sie, dass ich dies wiederhole, aber das größte Problem bei dem, was Sie gezeigt haben, ist, wie der "Prozessor" der stdout
und der stderr
Streams die Länge der hinzugefügten zukünftigen Zeilen im Voraus kennt, um sie richtig auszurichten.