![](/img/trans.png)
[英]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.