Shell-Script

在執行命令列表時添加到

  • March 15, 2022

我正在編譯一個龐大的命令列表(所有命令都執行相同的操作),但由於編譯該列表需要很長時間,我希望在完成之前開始執行(每個命令的執行通常需要比創建另一個更長的時間,所以沒有真正的列表枯竭的風險)。

執行命令列表的正常方法是編寫一個列出命令的 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

舊版本中的行為略有不同。

引用自:https://unix.stackexchange.com/questions/694485