답변:
실행할 때 :
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
Be careful with the redirection operators, their order matters a lot.
, 그러나 실제로 사용하는 예는 포함하지 않았습니다2>&1
$ 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
time
수동으로 시간 차이를 계산하는 것보다 명령을 사용하고 싶습니다 date
.time { fing -p googleadf.com > /dev/null 2>&1 && echo online || echo offline; }
date
. 다른 사람이 생성 된 출력을 읽는 것이 더 쉽습니다.
&>/dev/null
. 즉각적인 도움에 감사드립니다!