执行命令列表时添加

执行命令列表时添加

我正在编译一个巨大的命令列表(所有命令都做同样的事情),我想要执行,但由于编译该列表需要很长时间,我希望在完成之前开始执行(每个命令的执行通常需要比创建另一个要长,因此不存在列表枯竭的真正风险)。

执行命令列表的正常方法是编写一个列出命令的 shell 脚本,但是当我开始执行脚本时,我无法再向其中添加命令。

到目前为止我发现的方法是将命令放入command.list并具有parallel --jobs 1 --line-buffer :::: command.list,但由于它涉及使用parallel(我正在使用GNU并行,我不知道它是否可以与more-utils中的程序一起使用)用于非-并行执行事物,我认为这有点滥用parallel

有更简单的方法吗?如果我搞砸了一些事情并且列表确实用完了,那么可以跟踪哪些命令已被执行,那就太好了。

答案1

从:https://www.gnu.org/software/parallel/man.html#example-gnu-parallel-as-queue-system-batch-manager

true >jobqueue; tail -n+0 -f jobqueue | parallel --joblog my.log &
echo my_command my_arg >> jobqueue
my_job_generator >> jobqueue

这将为您提供已完成作业的记录 (my.log)。

GNU Parallel 版本 20220222 将仅输出作业n(并将其添加到my.log)当工作n+1已添加。如果这是不可接受的,只需添加另一个虚拟作业:

echo true dummy >> jobqueue

旧版本中的行为略有不同。

相关内容