首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ping命令总是在cygwin中返回零退出代码。

问ping命令总是在cygwin中返回零退出代码。
EN

Unix & Linux用户
提问于 2018-07-11 08:00:33
回答 1查看 2K关注 0票数 3

我刚刚注意到,ping命令总是在cygwin中返回零退出代码。

我将它安装为一个包ping。

实际产出:

代码语言:javascript
复制
$ 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

预期产出:

代码语言:javascript
复制
$ echo $?
1

此ping包包含非标准版本的ping命令,其行为显然与问题中所描述的相同。

我试着卸载这个包并安装inetutils,但是似乎没有ping命令。

我该如何解决这个问题呢?(包装等)

EDIT1 1:

为了便于移植,应该用POSIX编写The答案。很抱歉忘记了。

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2018-07-12 00:23:01

POSIX approach

Cygwin专用方式(包装器)

代码语言:javascript
复制
# 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
}

Windows专用方式(包装器)

代码语言:javascript
复制
# 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
}

Linux专用方式(直接)

代码语言:javascript
复制
# 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
}

Notes

  • 我知道这个解决方案到目前为止并不理想,但它有效。
  • 只要找出我们实际使用的ping命令,就可以简单地执行这些函数,尽管这超出了问答的范围,但我留下一个提示:命令-v ping。
  • 我选择从Cygwin卸载ping包并使用is_host_online_windows(),因为它比Cygwin程序更快。
  • 为了完整起见,我包括了is_host_online_linux(),尽管与这个问题无关。
票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/454634

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档