Bash:将SIGQUIT上ping的中间统计数据捕获为变量

linux_newbie

我有这个:

 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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章