将 stderr 重定向到第二个终端/tty

将 stderr 重定向到第二个终端/tty

我曾尝试过rse区分程序中的标准输出和标准错误流;但我真的很想选择同时查看这两个流独立航站楼,而无需重定向到文件并对其进行尾随或执行其他操作(我们假设其中一个流可以打印 ANSI 终端控制代码。)

有没有办法在新的终端中打开现有进程的标准错误,或者类似的东西?

答案1

打开两个终端。在第二个终端中,通过运行命令找出其 tty 设备tty。它将打印类似以下内容的内容/dev/pts/8

在第一个方法中,运行您的应用程序并将其 stderr 重定向到这里,例如myapp 2>/dev/pts/8

我经常用这个来调试,所以我将终端标题设置为包含 tty 号,这样我甚至不必运行命令。我在 shell 提示符中执行此操作,将更改标题的转义序列与 bash 的tty 行号(小写的 L)tty结合起来,即\lPS1=$'\\[\e]0;\l\a\\] ...'

我经常在启动实际应用程序之前在第二个终端中执行cat,以防万一我在那里意外输入了一些东西(这无伤大雅),并让光标转到第一列。但这不是强制性的。

答案2

我的第一反应是“不”,但后来我想到了这个丑陋的想法:

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

标准错误被重定向到进程替换,在那里收集内容然后传递给在 xterm 中执行的脚本。

我对自己能想到这个办法感到有点自豪,但更多的是感到尴尬。

相关内容