for循环bash脚本并行

0 parallel-processing bash for-loop

我正在尝试一个循环脚本,如果可能的话,每个循环并行运行.

#!/bin/bash

for ip in $(cat ./IPs); do
ping -n -c 2 -W 1 ${ip} >> Results/${ip}.log
done
Run Code Online (Sandbox Code Playgroud)

最终,我想在循环中放置我需要的任何东西,并让它进行多处理.我试图通过其他示例,但似乎无法让它按预期工作.我已经parallel安装了,如果这是一个选项.

Tob*_*ght 5

这似乎非常适合parallel:

parallel 'ping -n -c 2 -W 1 "{}" >>"Results/{}.log"' <IPs
Run Code Online (Sandbox Code Playgroud)

运行的命令parallel可以使用接收的行进行重定向以及参数.

我已经引用了{}命令中的使用- 这对于你自己控制下只包含主机名和/或地址的输入文件来说是不必要的,但这是一个很好的习惯,因为当输入可能包含重要的字符时到了shell.

请注意,默认情况下,parallel将每个核心只运行一个作业(这对于计算量很大的负载来说是个不错的选择).对于诸如此类的任务,大多数时间花在等待网络延迟上,我建议您使用一个-j参数(例如-j 1000%,每个核心运行10个作业).