如何在bash中并行化while循环?

Mat*_*ock 5 parallel-processing bash

我有以下while并行运行的循环。(这logProcess是我之前在脚本中定义的一个函数。)

while read LINE; do
    logProcess $LINE &
done <<< "$ELS_LOGS"
wait
Run Code Online (Sandbox Code Playgroud)

我需要找到一种方法来限制正在运行的进程数。我知道有并行进程在运行。如何转换循环以使用该命令?

Mar*_*ell 6

我可以向您推荐GNU Parallel吗?你的整个脚本将变成:

parallel -a "$ELS_LOGS" logProcess
Run Code Online (Sandbox Code Playgroud)

如果logProcess是在脚本中定义的函数,则需要在运行GNU Parallel之前先将其导出,如下所示:

export -f logProcess
Run Code Online (Sandbox Code Playgroud)

然后,如果您想要一次运行 8 个,您只需执行以下操作:

parallel -j 8 -a "$ELS_LOGS" logProcess
Run Code Online (Sandbox Code Playgroud)

如果你想看看它会做什么,而不实际做任何事情:

parallel --dry-run ...
Run Code Online (Sandbox Code Playgroud)

如果您想要进度条或预计到达时间:

parallel --eta ...
parallel --bar ...
Run Code Online (Sandbox Code Playgroud)