grep의 출력을 / dev / null로 리디렉션하는 요점은 무엇입니까? 경우 출력의 패턴을 찾고 지점

이 줄을 고려하십시오 :

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

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

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



답변

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


답변

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

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

... | grep -q '^200'

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


답변