我希望在后台分叉一个进程,同时在bash脚本中捕获输出。
我可以运行以下脚本来ping一个IP列表,它会将每个调用移动到后台并运行得非常快。但它并没有捕获执行命令的输出以进行进一步处理。
for i in $(cat list.txt); do
ping -c 1 $i &
done
我希望在命令中运行带有&符号的这种形式的脚本来在后台推送每次ping操作,但是与上面的脚本相比,它运行速度非常慢,这表明脚本没有并行执行。 / p>
for i in $(cat list.txt); do
y=$( ping -c 1 $i & )
echo "$y"
done
请告知如何在捕获命令输出的同时在后台实现并行执行
由于 约翰
答案 0 :(得分:1)
下面的脚本看起来很慢,因为你试图回显循环中的变量。因此,只有当所有分叉进程完成时,最后一个echo才会完成,从而使其顺序完成。
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中有stdout。