我刚刚注意到,ping命令总是在cygwin中返回零退出代码。
我将它安装为一个包ping。
实际产出:
$ ping 192.168.0.102 -c 1
PING 192.168.0.102 (192.168.0.102): 0 data bytes
36 bytes from 192.168.0.11: icmp_type=3 (Dest Unreachable) icmp_code=1
----192.168.0.102 PING Statistics----
1 packets transmitted, 0 packets received, 100.0% packet loss
vlastimil@vb-nb-windows ~
$ echo $?
0预期产出:
$ echo $?
1此ping包包含非标准版本的ping命令,其行为显然与问题中所描述的相同。
我试着卸载这个包并安装inetutils,但是似乎没有ping命令。
我该如何解决这个问题呢?(包装等)
EDIT1 1:
为了便于移植,应该用POSIX编写The答案。很抱歉忘记了。
发布于 2018-07-12 00:23:01
# Using ping utility from ping package
# This utility seems to always return 0 exit code
is_host_online_cygwin()
{
ping_output_raw=$(ping "$1" 64 1)
! echo "$ping_output_raw" | grep 'Dest Unreachable' > /dev/null 2>&1
}# Using built-in ping utility
# This utility seems to always return 0 exit code
is_host_online_windows()
{
ping_output_raw=$(ping -n 1 "$1")
! echo "$ping_output_raw" | grep 'Destination host unreachable' > /dev/null 2>&1
}# Using ping utility from iputils-ping package
# This utility returns the right exit code, there is no need for a wrapper
is_host_online_linux()
{
ping -c 1 "$1" > /dev/null 2>&1
}ping命令,就可以简单地执行这些函数,尽管这超出了问答的范围,但我留下一个提示:命令-v ping。ping包并使用is_host_online_windows(),因为它比Cygwin程序更快。is_host_online_linux(),尽管与这个问题无关。https://unix.stackexchange.com/questions/454634
复制相似问题