stdout和stderr-并排预览

tmp*_*tmp 3 bash stdout gnu-screen stderr tmux

我想将stdout和stderr分开,并能够在程序执行期间并排看到它们。

我知道的所有解决方案都需要将一个或两个流重定向到文件。

我的解决方案:

  1. 将stdout和stderr重定向到不同的文件,然后tail -f将这两个文件重定向到单独的终端窗口或tmux / screen中。这需要3个终端-1个用于命令调用,另外2个用于预览。
  2. 仅将stderr重定向到文件,并将文件重定向到taif -f单独的终端。这需要2个终端-1个用于命令调用和stdout,一个用于stderr预览。

两种解决方案都不方便,因为您必须运行多个命令并在终端之间切换。

有没有更好的解决方案来解决这个问题?有办法避免重定向到文件吗?

Tho*_*ner 7

所以因为OP专门要求并排,一个选项:tmux!\n(tmux有点重,但它确实很好地分割了窗格,我想是这样的例子:)

\n\n
    \n
  1. $ tmux
  2. \n
  3. 分割你的窗格:

  4. \n
  5. 左右:

    \n\n

    ^b+ %
    \n(^b表示 ctrl+b)

  6. \n
  7. 上下:

    \n\n

    ^b+"

  8. \n
  9. 聚焦你的错误窗格:

    \n\n

    ^b+ \xe2\x86\x91\xe2\x86\x93\xe2\x86\x92\xe2\x86\x90+enter

  10. \n
  11. $ tty,复制错误窗格的设备文件

  12. \n
  13. 重新聚焦您的输出窗格:

    \n\n

    ^b+ \xe2\x86\x91\xe2\x86\x93\xe2\x86\x92\xe2\x86\x90+enter

  14. \n
  15. $ your-command 2>/dev/pts/N

    \n\n

    /dev/pts/N您从另一个窗格复制的值在哪里

  16. \n
\n\n

整洁的!:相机闪光灯:

\n


Mar*_*ell 5

如果要避免创建文件,则可以执行此操作...

启动一个新的终端,然后在其中键入tty以找到该终端的设备专用文件,例如/dev/ttys002

然后在您的原始终端中,运行以下命令:

yourProgram 2> /dev/ttys002
Run Code Online (Sandbox Code Playgroud)

我用它作为测试程序:

#!/bin/bash
for i in {0..30}; do
   echo hi
   echo hi to stderr >&2
done
Run Code Online (Sandbox Code Playgroud)