Linux 无法在脚本中将stderr/stdout重定向到/dev/null
在我的脚本中,我基本上需要等待linux机器上的网络接口(例如en0、eth0等)完全初始化,然后脚本才能继续。我不希望在等待时有任何输出,我正在这样等待:Linux 无法在脚本中将stderr/stdout重定向到/dev/null,linux,bash,ping,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
#!/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-c1server&>/dev/null | egrep-m2-e“[0-9]+”
正确解析成功ping的第二行并告诉我字节,因此如果返回值为null,我知道网络没有启动
然而,出于某种原因,我在当前目录中得到了一个实际的egrep
文件,并且仍然得到了上面的输出connect:Network is unreable
- 如何测试ping是否成功并放弃所有输出和错误
使用此结果。这将解决问题
&>从第4版开始,操作员在所有bash
中都起作用。您可能需要检查这一点(请参见示例中的)
也就是说,由于您只想重定向错误,我建议您应该使用:
ping -c 1 server 2> /dev/null
这是因为ping
命令的输出已经存储在ping\u状态中
,即使单个命令对我不起作用<代码>状态=$(ping-c1服务器&>/dev/null | egrep-m2-e“[0-9]+”)
Nope。空结果。您正在将o/p重定向到/dev/null。那你怎么能把它弄出来呢ping-c1127.0.0.1&>/dev/null
@Antarus好的一点,我想我根本不想要任何输出,除非ping成功。此外,对于这个例子,你根本不需要grep。。。ping正确设置退出状态<代码>在ping-c1服务器时&>/dev/null;做完成
就足够了。@Anishan使用此方法时运气不佳。服务器
的值是多少?服务器
只是一个dns名称。@n请尝试对服务器进行基本ping。我认为网络设置有问题。网络设置没有问题。机器快速启动,在网络完全初始化之前,ping返回connect:network不可访问
,因为信息在arp表中。我只是想在等待消息启动时把它处理掉。这就是诀窍。谢谢另外,我阅读bash手册页,它更喜欢您使用&>
,但却没有提到任何关于版本可用性的内容,这让我很恼火!抢手货
ping -c 1 server 2> /dev/null