在我的脚本中,我基本上需要等待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
答案 0 :(得分:1)
ping -c 1 127.0.0.1 | awk 'NR==2{print $1}'
使用此结果。这将解决问题
答案 1 :(得分:1)
&>
运算符在所有bash
中都有效。您可能需要检查此link(请参阅示例中)。
那就是说,既然你只想重定向错误,我建议你应该使用:
ping -c 1 server 2> /dev/null
那是因为ping
命令的输出已存储在ping_status
。