Bash:将stdout从多个并发命令拆分为列

Arj*_*hta 6 linux bash shell

我使用单个&符号在bash脚本中运行多个命令,如下所示:

commandA & commandB & commandC
Run Code Online (Sandbox Code Playgroud)

他们每个人都有自己的stdout输出,但他们都混合在一起,并在一个不连贯的混乱中淹没控制台.

我想知道是否有一种简单的方法将输出管道输入到他们自己的列中...使用column命令或类似的东西.即.就像是:

commandA | column -1 & commandB | column -2 & commandC | column -3
Run Code Online (Sandbox Code Playgroud)

这种事情的新手,但从最初的挖掘看起来似乎pr可能是票?还是column命令......?

Arj*_*hta 6

遗憾地回答了我自己的问题。

提供的解决方案都不是我要找的。因此,我开发了自己的命令行实用程序:multiview。也许其他人会受益?

它通过将进程的stdout / stderr传递到命令界面,然后启动“查看器”以在列中查看其输出来工作:

fooProcess | multiview -s & \
barProcess | multiview -s & \
bazProcess | multiview -s & \
multiview
Run Code Online (Sandbox Code Playgroud)

这将显示其输出的整齐的列视图。您还可以通过在-s标志后添加一个字符串来命名每个进程:

fooProcess | multiview -s "foo" & \
barProcess | multiview -s "bar" & \
bazProcess | multiview -s "baz" & \
multiview
Run Code Online (Sandbox Code Playgroud)

还有其他一些选择,但这就是要点。

希望这可以帮助!