0

在我的脚本中,我基本上需要等待 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 的第二行并告诉我字节,所以我知道如果返回为 null,则网络未启动。

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

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

2 回答 2

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

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

于 2013-07-02T13:10:05.127 回答
1

&>运算符bash从版本 4 开始全部可用。您可能需要检查此链接(参见示例)。

也就是说,由于您只想重定向错误,我建议您应该使用:

ping -c 1 server 2> /dev/null

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

于 2013-07-02T13:41:17.010 回答