我希望在后台分叉一个进程,同时捕获 bash 脚本中的输出。
我可以运行以下脚本来 ping IP 列表,它将每个调用移至后台并且运行速度非常快。但它不会捕获执行命令的输出以供进一步处理。
for i in $(cat list.txt); do
ping -c 1 $i &
done
我希望在命令中使用&符号运行这种形式的脚本,以在后台推送每个 ping 尝试,但是与上面的脚本相比,它运行得非常慢,这表明该脚本不是并行执行的。
for i in $(cat list.txt); do
y=$( ping -c 1 $i & )
echo "$y"
done
请告知如何在捕获命令输出的同时实现后台并行执行
谢谢
约翰
下面的脚本看起来很慢,因为您试图在循环内回显变量。因此,只有当所有分叉进程完成时,最后一个回显才会完成,本质上使其成为连续的。
for i in $(cat list.txt); do
y=$( ping -c 4 1 $i & )
echo "$y"
done
相反,你可以做这样的事情
#!/bin/bash
count=0
for i in $(cat list.txt); do
y[count++]=$( ping -c 1 $i & )
done
该函数与第一个函数一样快,并且标准输出位于数组 y 中。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)