将调试输出发送到终端多路复用器

将调试输出发送到终端多路复用器

给定一个 shell 脚本(本例中为 bash),可以使用set -x-x传递给 bash 或其他支持 shell 来生成调试输出。

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

但是如何将 stderr 发送到终端多路复用器,例如screenor tmux

当脚本更改终端显示方式 (TUI) 时主要有用,因此发送 stderr 可以在另一个窗口/终端中进行更舒适的调试。

答案1

tty在您想要发送内容的终端中调用。它将打印例如/dev/pts/3然后将您想要的任何内容重定向到此文件,可能来自另一个终端。像这样:

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

这适用于tmuxscreen、单独的终端仿真器或 tty(您登录的地方)。在一个 shell 中调用tty并重定向/打印到另一个 shell 中所说的任何内容。

我使用类似的方法来调试我的管道。例子:

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

tmux 命令display '#{pane_tty}'/dev/pts/3在状态行中打印左右内容。如果目标窗格中没有 shell(因此您无法轻松地tty在那里运行),这非常有用。选择该窗格使其成为当前窗格,点击prefix:,键入命令,然后单击Enter

相关内容