[英]Is there an easy way to use a small script to automate reading of a text file and plotting using bash script with awk or other unix commands?
[英]Bash script for running parallel commands using input from a file
我正在尝试制作一个Shell脚本,该脚本读取配置文件并并行执行每一行的命令。
例如,我有IPs.cfg,其中可以包含可变数量的IP。 可能是一个或几个
IPs.cfg
145.x.x.x
176.x.x.x
192.x.x.x
我想读取文件,然后同时对每行执行一个命令...例如:
scp test.iso root@$IP1:/tmp &
scp test.iso root@$IP2:/tmp &
scp test.iso root@$IP3:/tmp &
wait
我认为这是将IP存储到阵列中的方式
IFS=$'\n' read -d '' -r -a array < IPs.cfg
然后我从文件中提取行数,并将其减少1,因为数组从0开始。
NUMLINES=`cat IPs.cfg | wc -l`
NUMLINES=$((NUMLINES-1))
现在,我想同时执行所有命令。 这是可变数量的参数,因此我不能仅手动使用scp test.iso root@${array[0]}:/tmp & scp test.iso root@${array[1]}:/tmp & so on
。 我可以使用while循环,但这意味着一次执行一个命令。 我也在考虑使用递归,但是我从未在bash脚本中做到这一点。
这可能是一个愚蠢的问题,但是我在这里有什么选择?
您可以利用GNU并行
循环应如下所示:
while read -r ip ; do
scp test.iso "root@$ip:/tmp" &
done < IPs.conf
wait
使用此技巧,您可以控制同时运行的并发进程数:
cat IPs.conf | xargs -n1 -I{} -P10 scp test.iso "root@{}:/tmp"
选中-p10
表示同时使用10个进程。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.