给定一个 shell 脚本(本例中为 bash),可以使用set -x
或-x
传递给 bash 或其他支持 shell 来生成调试输出。
我知道如何将所述输出重定向到文件./script.sh 2> out.log
或bash -x script.sh 2> out.log
.
但是如何将 stderr 发送到终端多路复用器,例如screen
or tmux
?
当脚本更改终端显示方式 (TUI) 时主要有用,因此发送 stderr 可以在另一个窗口/终端中进行更舒适的调试。
答案1
tty
在您想要发送内容的终端中调用。它将打印例如/dev/pts/3
然后将您想要的任何内容重定向到此文件,可能来自另一个终端。像这样:
bash -x script.sh 2> /dev/pts/3
这适用于tmux
、screen
、单独的终端仿真器或 tty(您登录的地方)。在一个 shell 中调用tty
并重定向/打印到另一个 shell 中所说的任何内容。
我使用类似的方法来调试我的管道。例子:
foo | tee /dev/pts2 | filter1 | tee /dev/pts3 | filter2
tmux 命令display '#{pane_tty}'
将/dev/pts/3
在状态行中打印左右内容。如果目标窗格中没有 shell(因此您无法轻松地tty
在那里运行),这非常有用。选择该窗格使其成为当前窗格,点击prefix:,键入命令,然后单击Enter。