我有一个bash函数:
resolv(){
for name in $*; do
test 1 -eq $(ping -c 1 -q "$name"|grep '1 packet transmitted'|wc -l) && echo ok || echo fail
done
}
但是,如果我传递一个未定义的名称,则返回,总是:
ping: unknown host name.that.do.not.resolv
fail
我该如何解决这个问题?
答案 0 :(得分:1)
您可以尝试getent
配置后的/etc/nsswitch.conf
:
> getent hosts my_laptop
127.0.0.1 localhost my_laptop
> getent hosts www.google.com
2607:f8b0:400b:80a::1014 www.google.com
> getent hosts name.that.do.not.resolv
>
答案 1 :(得分:0)
坚持你需要使用ping的假设(因为,例如,OSX中破坏的^ H ^ H ^ Hconfused dns分辨率):
请注意,你的grep不便携 - 有些人说"包"和其他人说"数据包" ...在我可用的ping的范围内,^ PING可以工作。
对于您的具体问题,您想要抑制错误输出 - 所以只需将stderr重定向到/ dev / null - 如果它是sh / bash /类似的那样只是figure.tight_layout()
< / p>
还添加了-t1以减少我们在ping失败/查找失败时可能花费的时间......可能需要调整以适应。
将2>/dev/null
分解成更具可读性(并且具有更明显的逻辑方向)的东西,因为我们并没有真正受限于oneliner。 :)
test && ||