序列化 shell 命令

you*_*uri 5 command-line bash

我正在寻找一种从终端提示符“堆叠”命令的方法,以便一次只执行一个命令:

  • 先输入一条命令,按回车,开始执行,回到shell(如&
  • 我可以输入第二个命令。我按回车,第一个命令还没有完成,所以它被堆叠起来(不像&)。但是,提示又回来了。

一种混合:

  • & 在后台启动,但第二个命令会与第一个命令同时运行,我不希望那样;
  • &&或者;一个接一个地启动一个命令,但你必须一次编写它们。我想在命令执行或堆叠后重新获得提示。

我发现的最接近的是:

$ cmd1 &
$ wait; cmd2 &
Run Code Online (Sandbox Code Playgroud)

但我正在寻找更有效的东西,允许我查看挂起、失败和已完成的命令。也许是这样的:

$ stackit cmd1
cmd1 started
$ stack it cmd2
cmd2 queued
$ stack it cmd3
cmd3 queued
$ stack it --
[1] running
[2] queued
[3] queued
Run Code Online (Sandbox Code Playgroud)

也许甚至允许一些并行性,比如当时的 2 个命令。

这看起来相当通用,所以我不想重新发明轮子。

用例:

  • 将文件复制到旧 NAS 或从旧 NAS 复制文件,当多个操作同时运行时会受到影响
  • wget 在大量文件上使用有限数量的连接是首选

Max*_*nni 2

您正在搜索任务后台处理程序命令。在 Debian/Ubuntu 的存储库中,要安装的软件包是task-spooler,要调用的二进制文件是tsp

在你的情况(&&风格)你可以使用

tsp -d cmd1
tsp -d cmd2
tsp -d cmd3
Run Code Online (Sandbox Code Playgroud)

然后使用

tsp -l
Run Code Online (Sandbox Code Playgroud)

检查队列的状态。

还有一些方法-S可以增加最大同时作业的数量。