Debug-Ausgabe an Terminal-Multiplexer senden

Nov 01 2020

Bei einem gegebenen Shell-Skript (in diesem Beispiel Bash) kann man das set -xoder -xdas Bash oder andere unterstützende Shells verwenden, um eine Debug-Ausgabe zu generieren.

Ich weiß, wie man die Ausgabe in eine Datei umleitet ./script.sh 2> out.logoder bash -x script.sh 2> out.log.

Aber wie kann man stderr an einen Terminal-Multiplexer senden, wie screenoder tmux?

Dies ist vor allem dann hilfreich, wenn das Skript die Anzeige des Terminals ändert (TUI). Wenn Sie also stderr senden, können Sie das Debuggen in einem anderen Fenster / Terminal komfortabler gestalten.

Antworten

2 KamilMaciorowski Nov 01 2020 at 03:21

Rufen Sie ttydas Terminal auf, an das Sie etwas senden möchten. Es wird zB gedruckt und /dev/pts/3dann alles, was Sie wollen, in diese Datei umleiten, möglicherweise von einem anderen Terminal. So was:

bash -x script.sh 2> /dev/pts/3

Dies funktioniert mit tmux, screengetrennte Terminal - Emulatoren oder ttys (wo Sie angemeldet sind). Rufen Sie ttyin einer Shell auf und leiten Sie / drucken Sie zu dem, was es von der anderen sagt.

Ich verwende einen ähnlichen Ansatz zum Debuggen meiner Pipelines. Beispiel:

foo | tee /dev/pts2 | filter1 | tee /dev/pts3 | filter2

Der Befehl tmux display '#{pane_tty}'wird ungefähr /dev/pts/3in der Statuszeile gedruckt . Dies ist nützlich, wenn sich im Zielbereich keine Shell befindet (sodass Sie dort nicht einfach ausführen ttykönnen). Wählen Sie das aktuelle Fenster aus, drücken Sie prefix:, geben Sie den Befehl ein und Enter.