Bash 希望运行命令列表,但能够在其运行时编辑该列表';她在跑步

Bash 希望运行命令列表,但能够在其运行时编辑该列表';她在跑步,bash,Bash,我有一个要运行的(bash)命令列表: <Command 1> <Command 2> ... <Command n> ... 每个命令都需要很长时间才能运行,有时在看到(例如)的输出后,我想更新的参数,或者在列表中的任意位置添加一个新的。但我希望能够在任何时候离开我的机器,让它在我上次更新列表时一直工作 这类似于这里的问题:。这些答案中的一些可以提供服务,但是这个问题有一个额外的限制,就是想要编辑脚本文件本身,我怀疑有一个更简单的答案,因为我没有那个确

我有一个要运行的(bash)命令列表:

<Command 1>
<Command 2>
...
<Command n>

...
每个命令都需要很长时间才能运行,有时在看到(例如)
的输出后,我想更新
的参数,或者在列表中的任意位置添加一个新的
。但我希望能够在任何时候离开我的机器,让它在我上次更新列表时一直工作

这类似于这里的问题:。这些答案中的一些可以提供服务,但是这个问题有一个额外的限制,就是想要编辑脚本文件本身,我怀疑有一个更简单的答案,因为我没有那个确切的限制


我当前的解决方案是在脚本结束时调用第二个脚本。我可以在第一个文件运行时编辑第二个文件,这允许我将新命令附加到列表的末尾,但我无法对第一个文件中的命令列表进行任何更改。一旦在第二个文件中开始执行,我就不能再做任何更改了。但我经常停止脚本以插入更新,这有时意味着停止一个几乎完成的长命令,这样我才能在离开计算机一段时间之前更新列表中的后续项。当然,我可以用这种方式将许多文件链接在一起,但这看起来很混乱,因为(希望)有一个简单的解决方案。

我想说的是,将要运行的每个命令放在一个文件中,并在主文件中列出所有命令文件

ex:main.sh

#!/bin/bash

# Here you define the absolute path of your script

scriptPath="/home/script/"

 # Name of your script

 scriptCommand1="command_1.sh"
 scriptCommand2="command_2.sh"
 ...
 scriptCommandN="command_N.sh"

 # Here you execute your script

 $scriptPath/$scriptCommand1
 $scriptPath/$scriptCommand2
 ...
 $scriptPath/$scriptCommandN

我想,当1运行时,您可以修改另一个,因为它们是外部文件

我想说的是,将要运行的每个命令放在一个文件中,并在主文件中列出所有命令文件

ex:main.sh

#!/bin/bash

# Here you define the absolute path of your script

scriptPath="/home/script/"

 # Name of your script

 scriptCommand1="command_1.sh"
 scriptCommand2="command_2.sh"
 ...
 scriptCommandN="command_N.sh"

 # Here you execute your script

 $scriptPath/$scriptCommand1
 $scriptPath/$scriptCommand2
 ...
 $scriptPath/$scriptCommandN

我想当1运行时,您可以修改另一个,因为它们是外部文件

这更像是一个概念性的答案,而不是我提供完整代码的答案。我的想法是运行Redis(安装起来非常简单),并将其用作数据结构服务器

因此,您基本上可以将每个作业添加到一个Redis列表中,您可以在命令行中使用
LPUSH

echo "lpush jobs job1" | redis-cli
然后,如果愿意,您可以并行启动一个或多个工人,他们坐在一个循环中,重复执行列表中的作业(阻止pop,等待有作业)并处理它们:

#!/bin/bash
while :; do
    job=$(echo brpop jobs 0 | redis_cli)
    do $job
done
然后,当工作程序正在使用删除和插入操作运行时,您可以自由修改列表


示例。

这更像是一个概念性的答案,而不是我提供完整代码的答案。我的想法是运行Redis(安装非常简单),并将其用作数据结构服务器。在您的情况下,数据结构将是作业列表

因此,您基本上可以将每个作业添加到一个Redis列表中,您可以在命令行中使用
LPUSH

echo "lpush jobs job1" | redis-cli
然后,如果愿意,您可以并行启动一个或多个工人,他们坐在一个循环中,重复执行列表中的作业(阻止pop,等待有作业)并处理它们:

#!/bin/bash
while :; do
    job=$(echo brpop jobs 0 | redis_cli)
    do $job
done
然后,当工作程序正在使用删除和插入操作运行时,您可以自由修改列表


示例。

那么您想在不实际使用分支的情况下使用分支?我建议您在脚本中添加更多逻辑,这样它就可以处理所有需要的情况。看起来您有XY问题。所以您想在不实际使用分支的情况下使用分支?我建议您在脚本中添加更多逻辑,这样它就可以处理所有需要的情况评估。看起来你有XY问题。我喜欢这个想法。它可以适用于任何队列系统,包括一个简单的自制系统,它将队列保存在一组编号的文件中。我喜欢这个想法。它可以适用于任何队列系统,包括一个简单的自制系统,它将队列保存在一组编号的文件中。