Bash

將調試輸出發送到終端多路復用器

  • October 31, 2020

給定一個 shell 腳本(本例中為 bash),可以使用set -x-x傳遞給 bash 或其他支持的 shell 來生成調試輸出。

我知道如何將所述輸出重定向到文件./script.sh 2> out.logbash -x script.sh 2> out.log.

但是如何將 stderr 發送到終端多路復用器,例如screenor tmux

主要在腳本更改終端顯示方式(TUI)時有用,因此發送 stderr 可以在另一個視窗/終端中進行更舒適的調試。

tty在您要發送內容的終端中呼叫。它將列印例如/dev/pts/3然後將您想要的任何內容重定向到此文件,可能來自另一個終端。像這樣:

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

這適用於tmux, screen, 單獨的終端仿真器或 ttys(您登錄的地方)。在一個 shell 中呼叫tty並重定向/列印到另一個 shell 中的任何內容。

我使用類似的方法來調試我的管道。例子:

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

tmux 命令display '#{pane_tty}'將在狀態行中列印/dev/pts/3左右。如果目標窗格中沒有 shell(因此您不能輕鬆地在tty那裡執行),這將很有用。選擇窗格,使其處於目前狀態,點擊prefix``:,鍵入命令和Enter

引用自:https://unix.stackexchange.com/questions/617371