tmp*_*tmp 3 bash stdout gnu-screen stderr tmux
我想将stdout和stderr分开,并能够在程序执行期间并排看到它们。
我知道的所有解决方案都需要将一个或两个流重定向到文件。
我的解决方案:
tail -f将这两个文件重定向到单独的终端窗口或tmux / screen中。这需要3个终端-1个用于命令调用,另外2个用于预览。taif -f单独的终端。这需要2个终端-1个用于命令调用和stdout,一个用于stderr预览。两种解决方案都不方便,因为您必须运行多个命令并在终端之间切换。
有没有更好的解决方案来解决这个问题?有办法避免重定向到文件吗?
所以因为OP专门要求并排,一个选项:tmux!\n(tmux有点重,但它确实很好地分割了窗格,我想是这样的例子:)
\n\n$ tmux分割你的窗格:
左右:
\n\n^b+ %
\n(^b表示 ctrl+b)
上下:
\n\n^b+"
聚焦你的错误窗格:
^b+ \xe2\x86\x91\xe2\x86\x93\xe2\x86\x92\xe2\x86\x90+enter
$ tty,复制错误窗格的设备文件
重新聚焦您的输出窗格:
^b+ \xe2\x86\x91\xe2\x86\x93\xe2\x86\x92\xe2\x86\x90+enter
$ your-command 2>/dev/pts/N
/dev/pts/N您从另一个窗格复制的值在哪里
整洁的!:相机闪光灯:
\n如果要避免创建文件,则可以执行此操作...
启动一个新的终端,然后在其中键入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)