Shell-Script
在執行命令列表時添加到
我正在編譯一個龐大的命令列表(所有命令都執行相同的操作),但由於編譯該列表需要很長時間,我希望在完成之前開始執行(每個命令的執行通常需要比創建另一個更長的時間,所以沒有真正的列表枯竭的風險)。
執行命令列表的正常方法是編寫一個列出命令的 shell 腳本,但是當我開始執行腳本時,我不能再添加它了。
到目前為止我發現的方法是將命令放入
command.list
並擁有parallel --jobs 1 --line-buffer :::: command.list
,但由於它涉及使用parallel
(我正在使用 GNU 並行,我不知道它是否可以與 more-utils 中的程序一起使用)用於非並行執行事物,我認為這有點濫用parallel
.有沒有更簡單的方法呢?如果我搞砸了某些事情並且列表確實用完了,那麼可以跟踪哪些命令已被執行,這會很好。
來自: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+1時輸出作業**n(並將其添加到
my.log
)。如果這是不可接受的,只需添加另一個虛擬作業:echo true dummy >> jobqueue
舊版本中的行為略有不同。