如何并行运行多个命令并查看两者的输出?

mpe*_*pen 7 command-line

具体来说,我想跑

lsyncd lsyncd.lua
Run Code Online (Sandbox Code Playgroud)

webpack --progress --color -w
Run Code Online (Sandbox Code Playgroud)

这两个都是长期运行的进程。我想在我的终端中看到两者的输出。如果结果有点混乱并不重要,我只是喜欢看到他们正在做他们应该做的事情。

另外,我希望它在我按下时终止两个进程Ctrl+C


我想

parallel ::: 'lsyncd lsyncd.lua' 'webpack --progress --color -w'
Run Code Online (Sandbox Code Playgroud)

这似乎有效,但即使我单独运行这些命令时,我也看不到任何输出,但它们会输出一些内容。

kos*_*kos 6

使用parallel(在moreutils包中):

parallel -j 2 -- 'lsyncd lsyncd.lua' 'webpack --progress --color -w'
Run Code Online (Sandbox Code Playgroud)

由于该parallel进程在前台运行,因此按CTRL+C将立即终止在其上运行的所有进程。

  • -j:用于限制同时运行的作业数量;
  • --: 将选项与命令分开。
parallel -j 2 -- 'lsyncd lsyncd.lua' 'webpack --progress --color -w'
Run Code Online (Sandbox Code Playgroud)

  • 啊哈。这个“parallel”似乎与“parallel”包(GNU?)不同。这个似乎有效!另一个只是一直说“并行:警告:从终端读取输入。只有专家才会故意这样做。按 CTRL-D 退出。”。 (2认同)

Ole*_*nge 5

GNU Parallel 默认推迟输出,直到作业完成。您可以改为要求它在有完整行时立即打印输出。

parallel  --lb ::: 'lsyncd lsyncd.lua' 'webpack --progress --color -w'
Run Code Online (Sandbox Code Playgroud)

它避免了输出的半线混合:

parallel -j0 --lb 'echo {};echo -n {};sleep {};echo {}' ::: 1 3 2 4
Run Code Online (Sandbox Code Playgroud)

花 20 分钟阅读 GNU Parallel 2018 的第 1+2 章(在线印刷)。您的命令行会因此而爱您。