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

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

다음 줄을 고려하십시오.

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

결과가 다음과 같은 경우 출력에서 ​​패턴을 찾는 요점은 무엇입니까?저것버려진 걸까요?

그리고 이와 같은 줄이 bash 스크립트의 마지막 항목으로 나타나는 경우 종료 값이 스크립트 호출자에게 반환됩니까, 아니면 무시됩니까? (나는 이것이 단지 부작용으로 수행되거나 어떻게든 호출자에게 무언가를 반환하기 위해 수행되었다고 가정할 수 있다고 추측합니다.)

답변1

귀하의 의심은 정확합니다. 스크립트의 마지막 명령의 종료 상태가 호출 환경으로 전달됩니다. 따라서 grep스크립트는 데이터의 어떤 항목과 일치하면 종료 상태 0을 반환하고, 일치하지 않으면 현재 상태 1을 반환하며, 오류가 발생하면 종료 상태 2를 반환합니다.

답변2

폐기된 ping 출력의 요점은 grep작성자가 반환 상태만 원한다는 것입니다 grep. 그/그녀는 단지 패턴이 일치하는지 알고 싶어합니다. 귀하의 경우 마지막 명령은 grep이전 명령의 출력에 200.

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

... | grep -q '^200'

grep -q약간의 부작용이 있으니 주의해주세요 . 감사합니다.스티븐 차제라스그의 의견에 언급되었습니다. grep -q첫 번째 일치 항목을 찾는 즉시 종료됩니다. 종료 licenseTool후에도 계속 무언가를 쓰면 grepSIGPIPE를 받게 됩니다.

관련 정보