我有这个:
ping -q xxx.xxx.xxx.xxx & disown; pingpid=$!
for run in {1..3}; do
sleep 5
stats+=$(kill -SIGQUIT $pingpid)
done
kill $pingpid
因此,基本上,我使用-q选项在后台启动ping(仅显示统计信息),获取其PID,然后执行一个for
循环,在该循环中,我想将ping的中间统计信息存储kill -SIGQUIT $pingpid
在变量中...这是3行统计信息,相隔5秒。
我可以看到中介统计信息已打印到stdout,但是当我检查$stats
变量时,发现它为空。我还尝试了将stderr重定向到stdout,但是仍然无法获取将统计信息存储在其中的变量。
您尝试捕获的输出来自ping进程(准确地说是标准错误),而不是kill进程。启动它时,需要使用重定向捕获其输出。尝试这个:
stats=""
{
read pingpid
for run in {1..3}; do
sleep 5
kill -quit $pingpid
read line
stats+="$line"$'\n'
done
} < <(ping -q xx.xx.xx.xx 2>&1 >/dev/null & echo $!)
kill $pingpid
stats=${stats%$'\n'} # Remove the extra newline
echo "$stats"
在重定向的排序ping
命令,2>&1 >/dev/null
,重定向标准出来/dev/null
,而标准错误重定向到环路的输入端。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句