无法在脚本中将stderr / stdout重定向到/ dev / null

时间:2013-07-02 12:37:57

标签: linux bash ping

在我的脚本中,我基本上需要等待linux机器上的网络接口(例如en0,eth0等)在我的脚本继续之前完全初始化。在等待的时候我不想要任何输出,我正在做这样的等待:

#!/bin/bash

printf "\nWaiting for the network to start...\n"

ping_status=$(ping -c 1 server &>/dev/null | egrep -m 2 -e "[0-9]+")
i=0
while [ -z "$status" ]
do
   if [ "$i" -eq 30 ]
   then
      printf "\nServer unresponsive for 30 seconds.  Quitting script\n"
      exit 1
   else
      sleep 1
      i=$((i+1))
      ping_status=$(ping -c 1 server &>/dev/null | egrep -m 2 -e "[0-9]+")
   fi
done

问题是我得到以下输出,直到我的网络被初始化:

connect: Network is unreachable
connect: Network is unreachable

命令ping -c 1 server &>/dev/null | egrep -m 2 -e "[0-9]+"正确解析成功ping的第二行并告诉我字节,所以我知道如果返回为空则网络不会启动。

出于某种原因,我在当前目录中获得了一个实际的egrep文件,但我仍然得到上面的输出connect: Network is unreachable

  • 如何测试ping成功并丢弃所有输出和错误?

2 个答案:

答案 0 :(得分:1)

ping -c 1 127.0.0.1 | awk 'NR==2{print $1}'

使用此结果。这将解决问题

答案 1 :(得分:1)

从版本4开始,

&>运算符在所有bash中都有效。您可能需要检查此link(请参阅示例中)。

那就是说,既然你只想重定向错误,我建议你应该使用:

ping -c 1 server 2> /dev/null

那是因为ping命令的输出已存储在ping_status