grep의 출력을 / dev / null로 리디렉션하는 요점은 무엇입니까?


24

이 줄을 고려하십시오 :

${libdir}/bin/licenseTool check "${SERIAL}" "${VERSION}" "${PRODUCT}" ${libdir} | grep '^200' >/dev/null

의 결과 경우 출력의 패턴을 찾고 지점 무엇 버려지는?

그리고 그러한 줄이 bash 스크립트에서 마지막으로 나타나는 경우 종료 값이 스크립트의 호출자에게 반환되거나 무시됩니까? (이것이 부작용에 대해서만 이루어 졌는지 또는 어떻게 든 호출자에게 무언가를 반환한다고 가정 할 수 있는지 여부를 추측하고 있습니다.)

답변:


29

당신의 의심은 맞습니다; 스크립트의 마지막 명령의 종료 상태는 호출 환경으로 전달됩니다. 따라서이 스크립트는 grep데이터에서 일치하는 항목이 있으면 종료 상태 0을, 일치하지 않으면 존재 상태 1을, 오류가 발생한 경우 종료 상태 2를 반환합니다.


27

grep버려진 핑 출력 의 요점은 기록기가의 반환 상태 만 원한다는 것입니다 grep. 패턴이 일치하는지 여부 만 알고 싶어합니다. 귀하의 경우 마지막 grep은 이전 명령의 출력에로 시작하는 줄이 포함되어 있는지 확인합니다 200.

최신 POSIX 시스템에서는 다음으로 리디렉션하지 않고 grep -q 를 사용 하여 모든 작업을 수행 할 수 있습니다 /dev/null.

... | grep -q '^200'

메모 사용이하는 grep -q사소한 부작용을 가지고, 감사 스테판 Chazelas가 자신의 의견에서 지적. grep -q첫 번째 일치 항목을 찾 자마자 종료됩니다. 종료 licenseTool후에도 무언가를 쓰면 grepSIGPIPE를받습니다.


2
grep -q사용 적은 CPU
Skaperen

5
이러한 일이 진행되면서 grep -q비교적 최근에 추가되었습니다. > /dev/null빙하 시대 (1995 년)에 당신이 가진 모든 것이기 때문에 많은 스크립트가 여전히 대신 사용 합니다.
zwol

3
첫 문장에 동사가 부족합니까?
AL

GNU 맨 페이지의 "grep -q"와 "grep> / dev / null"사이의 또 다른 불일치 : "그러나 -q 또는 --quiet 또는 --silent를 사용하고 행을 선택한 경우 종료 상태는 다음과 같습니다. 오류가 발생한 경우에도 0입니다. "
Mark

문서가 올바른 경우 "오류가 발생하더라도 종료 상태가 0"입니다 ... -q종료 상태를 확인하여 오류에 대해 알고 싶기 때문에 옵션이 적절하지 않은 것 같습니다.
Trevor Boyd Smith
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.