我正在存储服务器上的ssh连接中运行一个大约3000个卷的for循环,这个循环一个接一个地在循环中运行,而我希望命令vol show-footprint "$vols" -fields volume-blocks-footprint,volume-blocks-footprint-bin0,volume-blocks-footprint-bin1一次在多个卷上并行运行,假设一次运行10个卷。
这里,myTotalVol包含所有3k卷名,如下所示:
myvol001
myvol002
myvol003
myvol004
myvol005下面是正在工作的小型for loop。
for vols in $(cat myTotalVol);
do
echo -n "$vols " ;\
ssh storageServer01 "row 0; set -unit MB; \
vol show-footprint "$vols" -fields volume-blocks-footprint,volume-blocks-footprint-bin0,volume-blocks-footprint-bin1"; \
done请建议我是否可以一次在多个卷上运行上述命令,这些卷保存在myTotalVol文件中。
编辑:
正如在评论部分中所问的,因此下面只是一个视图,它是如何工作的.
$ ssh store01
Last login time: 6/30/2022 10:49:41
store01::> row 0;set -unit MB
(rows)
store01::> vol show-footprint myvol001 -fields volume-blocks-footprint,volume-blocks-footprint-bin0,volume-blocks-footprint-bin1
vserver volume volume-blocks-footprint volume-blocks-footprint-bin0 volume-blocks-footprint-bin1
-------- -------------------- ----------------------- ---------------------------- ----------------------------
myvol001 myvol00198703MB 48272MB 51988MB正如您在这里看到的命令vol show-footprint myvol001 -fields volume-blocks-footprint,volume-blocks-footprint-bin0,volume-blocks-footprint-bin1一样,我必须运行这个命令超过3000个卷,就像我在这个命令中有myvol001一样,所以myvol001会像我在for循环中使用的那样进入变量,在那里我使用的是"$vols",它指的是文件中的3k vols。
发布于 2022-07-01 07:54:33
我不太清楚您的目标是什么,但是您应该能够创建一个复合语句,生成您想要的命令,然后通过ssh这样发送:
{ printf "row 0; set -unit MB;\n"
while read -r vol ; do
printf "vol show-footprint ${vol} -fields volume-blocks-footprint,volume-blocks-footprint-bin0,volume-blocks-footprint-bin1\n"
done < myTotalVol } | ssh store01如果您在|之前添加了一个注释字符,您可以尝试它并查看它会产生什么:
{ ...
...
done < myTotalVol } # | ssh store01或者你可以用awk来做
awk 'BEGIN{print "row 0; set -unit MB"} {print "vol show-footprint", $1, "-fields volume-blocks-footprint,volume-blocks-footprint-bin0,volume-blocks-footprint-bin1"}' myTotalVol | ssh store01同样,将#放在| ssh store01前面,以便查看和检查输出,而不将其发送到ssh。
https://stackoverflow.com/questions/72818382
复制相似问题