의 모든 ping
출력 없이 내 네트워크 상태를 모니터링하는 간단한 스크립트를 작성하려고합니다 .
ping -q -c 1 google.com > /dev/null && echo online || echo offline
문제는 연결되지 않은 경우에도 여전히 출력에 오류 메시지가 표시된다는 것입니다.
ping: unknown host google.com
offline
이 오류 메시지를 출력에서 유지하려면 어떻게해야합니까?
답변
실행할 때 :
ping -q -c 1 google.com > /dev/null && echo online || echo offline
당신은 본질적으로 단지 스트림 1 (즉,의 출력 리디렉션 stdout
에를) /dev/null
.
정상적인 프로그램 실행으로 생성 된 출력을 리디렉션하려는 경우에 좋습니다. 그러나 모든 오류, 경고 또는 실패로 인한 출력을 리디렉션하려는 경우 stderr
또는 표준 오류 스트림 도로 리디렉션해야 합니다 /dev/null
.
이를 수행하는 한 가지 방법은 다음 >
과 같이 리디렉션 연산자로 리디렉션하려는 스트림 수를 앞에 추가하는 것입니다.Command 2> /dev/null
따라서 명령은 다음과 같습니다.
ping -q -c 1 google.com > /dev/null 2> /dev/null && echo online || echo offline
그러나 이미 하나의 스트림을로 리디렉션했습니다 /dev/null
. 동일한 리디렉션에서 단순히 피기 백을하지 않는 이유는 무엇입니까? Bash를 통해 리디렉션 할 스트림 번호를 지정하여이 작업을 수행 할 수 있습니다. 2>&1
.
&
리디렉션 연산자 뒤 의 문자를 확인하십시오. 이것은 쉘에 다음에 나타나는 것이 파일 이름이 아니라 출력 스트림의 식별자임을 알려줍니다.
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
답변
표준 출력 ( >
또는 1>
)과 표준 오류 ( 2>
)를 모두 리디렉션해야합니다 .
ping -q -c 1 google.com > /dev/null 2>/dev/null && echo online || echo offline
또는 하나를 다른 것으로 리디렉션하십시오.
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
예
$ 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
것이 좋습니다.
핑 실패 속도 저하
$ 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