![POSIX방법](https://linux55.com/image/136695/POSIX%EB%B0%A9%EB%B2%95.png)
ping
방금 이 명령이 cygwin에서 항상 0 종료 코드를 반환한다는 것을 알았습니다 .
저는 패키지로 설치했어요 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
.
이 문제를 어떻게 해결할 수 있나요? (포장지 등)
편집 1:
이식성을 위해 답변은 POSIX로 작성되어야 합니다. 죄송해요 깜빡했어요.
답변1
POSIX방법
Cygwin 특정 방식(래퍼)
# 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 특정 방법(래퍼) [콘테스트 우승자]
# 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 특정 방법(직접)
# 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
. 비록 이 Q&A의 범위를 벗어나는 내용이지만 힌트를 드리겠습니다.command -v ping
저는
ping
이 패키지를 Cygwin에서 제거하고is_host_online_windows()
Cygwin 프로그램보다 빠르기 때문에 사용하기로 결정했습니다.is_host_online_linux()
이 질문과 관련이 없지만 완전성을 위해 포함하고 있습니다 .