如何在终端窗口中同时运行多个 Bash 脚本?

如何在终端窗口中同时运行多个 Bash 脚本?

我需要同时运行多个 Bash 脚本(准确地说是具有不同变量的同一脚本)。为了控制选项卡的数量,我希望将它们分组在一个终端选项卡中。

脚本定期输出,我检查是否有任何问题。

如果我将它们发送到后台

./script.sh 1 &
./script.sh 2 &
./script.sh 3 &
./script.sh 4

Ctrl我将失去对它们的控制权。例如,我通过+终止脚本C。使用上述代码,我应该找到pid每个进程以终止它们。

请注意,上面的代码是我的主脚本(例如)的内容,./all_scripts.sh而不是在终端中键入的命令。

有没有办法在同一终端中运行脚本,同时将它们视为单个输出脚本?

答案1

你不会失去对它们的控制。您将它们(最后一个除外)发送到后台。

如果运行指定的命令链,则调用./script.sh 4将在前台运行,其他脚本将在后台运行。输入将被发送到前台脚本。要暂停前台脚本,请按CtrlZ。要将挂起的脚本发送到后台继续运行,请使用该bg命令。

要查看您拥有的脚本(或更准确地说,作业)以及它们所处的状态,请使用jobs

要使特定作业脱颖而出,请使用fg其编号(如上述 所报告jobs)以及%前缀,例如fg %2。要终止特定作业,您可以将其带到前台fg并理智地终止它,或者也可以kill,例如kill -TERM %2.

答案2

在测试了不同的方法和程序后,我发现实用的解决方案是GNU 并行。我发布这个答案是因为它可能对其他人有帮助。

GNU Parallel并不是为此任务而构建的,但完美地达到了目的。

如果运行脚本为

parallel -u ::: './script.sh 1' './script.sh 2' #(and so forth)

所有脚本将并行运行。

-u( )标志在执行脚本时--ungroup将脚本输出发送到其中。stdout

Ctrl+C终止该parallel作业,并随后终止所有正在运行的脚本。

答案3

您可以用于tmux此目的。

它是一种终端多路复用器,这意味着它将一个选项卡拆分为多个窗口。

  • 使用命令启动它tmux
  • 使用Contr+B 后跟"%可以将一个窗格分成两个窗格。
  • 在前台启动进程。
  • Contr使用 uding +B和箭头键在进程之间切换。

现在,您可以在终端的一个选项卡中正常控制多个进程。

如果您想要聚焦(或取消聚焦)特定窗格,请使用Contr+B后跟Z

如果您需要滚动,请使用Contr+B后跟Q并使用箭头键滚动(或激活鼠标模式)。

你可以找到一份备忘单这里

也可以使该过程自动化。

答案4

任务后台处理程序可以满足这种需求。 https://vicerveza.homeunix.net/~viric/soft/ts/article_linux_com.html

您可以在 debian 和 ubuntu 中找到别名为“tsp”的工具。

相关内容