Umleiten von stderr zum zweiten Terminal / tty

Ich habe Dinge wie rse versucht, um Standardausgabe - und Standardfehlerströme von einem Programm zu unterscheiden; aber ich möchte wirklich die Möglichkeit haben, die beiden in separaten Terminals anzuzeigen, ohne in eine Datei umzuleiten und sie oder etwas abzufangen (nehmen wir an, dass einer der Streams ANSI-Terminal-Steuercodes drucken kann.)

Gibt es eine Möglichkeit, den Standardfehler eines vorhandenen Prozesses in einem neuen Terminal oder ähnlichem zu öffnen?

Author: ELLIOTTCABLE, 2015-04-14

2 answers

{[7],} Öffnen Sie zwei terminals. Im zweiten Fall ermitteln Sie das tty-Gerät, indem Sie den Befehl tty ausführen. Es wird so etwas wie /dev/pts/8 gedruckt.

Führen Sie im ersten Fall Ihre App aus und leiten Sie hier ihren stderr um, z. B. myapp 2>/dev/pts/8.

Ich verwende dies so oft zum Debuggen, dass ich den Terminaltitel so eingestellt habe, dass er die tty-Nummer enthält, sodass ich nicht einmal den Befehl tty ausführen muss. Ich mache dies in der Shell-Eingabeaufforderung und kombiniere die Escape-Sequenz, die den Titel ändert, mit Bashs \l (das ist ein Kleinbuchstabe L) für die tty-Zeilennummer, d.h. PS1=$'\\[\e]0;\l\a\\] ...'

Ich führe oft ein cat im zweiten Terminal aus, bevor ich die eigentliche App starte, nur für den Fall, dass ich versehentlich etwas dort eingebe, ist es harmlos, und um den Cursor zur ersten Spalte zu bewegen. Es ist jedoch nicht obligatorisch.

 5
Author: egmont,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2015-04-23 12:56:01

Mein erster Instinkt war "Nein" , aber dann kam ich auf diese Hässlichkeit:

sh -c 'echo stdout; echo stderr >&2' 2> >(
    errs=$(cat)
    xterm -e "bash -c '
        cat <<\"END\"
$errs
END
        read -p DONE
    '"
)

Der Standardfehler wird zu einer Prozesssubstitution umgeleitet, in der der Inhalt gesammelt und dann an ein Skript übergeben wird, das in einem xterm ausgeführt wird.

Ich bin irgendwie stolz darauf, dass ich es mir ausgedacht habe, aber meistens verlegen.

 1
Author: glenn jackman,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/techietown.info/template/agent.layouts/content.php on line 61
2015-04-14 01:26:01