Answers:
运行时:
ping -q -c 1 google.com > /dev/null && echo online || echo offline
您实际上只是将流1的输出(即stdout
)重定向到/dev/null
。
当您想重定向程序正常执行所产生的输出时,这很好。但是,如果您还希望将由所有错误,警告或故障引起的输出重定向,则还应该将stderr
or标准错误流重定向到/dev/null
。
一种方法是在您希望重定向到重定向运算符的流编号之前添加前缀,>
如下所示:Command 2> /dev/null
因此,您的命令如下所示:
ping -q -c 1 google.com > /dev/null 2> /dev/null && echo online || echo offline
但是请注意,我们已经将一个流重定向到/dev/null
。为什么不简单地piggy带相同的重定向?Bash允许我们通过指定重定向到的流号来做到这一点。2>&1
。
注意&
重定向操作符后面的字符。这告诉Shell接下来显示的不是文件名,而是输出流的标识符。
ping -q -c 1 google.com > /dev/null 2>&1 echo online || echo offline
注意重定向操作符,它们的顺序很重要。如果您以错误的顺序重定向,将导致意外的结果。
达到完全静音的另一种方法是将所有输出流重定向到/dev/null
使用此快捷方式:(&>/dev/null
或使用重定向到日志文件&>/path/to/file.log
)。
因此,将命令编写为:
ping -q -c 1 google.com &> /dev/null && echo online || echo offline
Be careful with the redirection operators, their order matters a lot.
,但您没有提供实际使用的示例2>&1
$ ping -q -c 1 google.com > /dev/null 2>&1 && echo online || echo offline
$ ping -q -c 1 google.com > /dev/null 2>&1 && echo online || echo offline
online
$ ping -q -c 1 googleadf.com > /dev/null 2>&1 && echo online || echo offline
offline
根据您的ping
实现,您可能会被限制为一个计数-c 1
。某些实现会让您跌破此限制,但实际上您必须等待错误的查询才能超时。因此,除了使用之外,ping
您可能还想使用fing
。
ping失败的速度
$ date; ping -q -c 1 google.com > /dev/null 2>&1 && echo online || echo offline; date
Tue Jan 28 13:51:10 EST 2014
online
Tue Jan 28 13:51:10 EST 2014
$ date; ping -q -c 1 googleadf.com > /dev/null 2>&1 && echo online || echo offline; date
Tue Jan 28 13:51:15 EST 2014
offline
Tue Jan 28 13:51:25 EST 2014
失败要快得多
$ date; fing -p google.com > /dev/null 2>&1 && echo online || echo offline; date
Tue Jan 28 13:49:21 EST 2014
online
Tue Jan 28 13:49:22 EST 2014
$ date; fing -p googleadf.com > /dev/null 2>&1 && echo online || echo offline; date
Tue Jan 28 13:49:35 EST 2014
online
Tue Jan 28 13:49:38 EST 2014
time
命令,也不愿手动计算时间差date
:time { fing -p googleadf.com > /dev/null 2>&1 && echo online || echo offline; }
date
。IMO,其他人更容易读取生成的输出。
&>/dev/null
它。谢谢大家的即时帮助!