grep을 찾으면 1로 종료하고, 찾지 못하면 0으로 종료하십시오.

grep을 찾으면 1로 종료하고, 찾지 못하면 0으로 종료하십시오.

Error 1Makefile을 빌드하고 발견되면(일치) 오류를 반환 하고 발견되지 않으면 성공을 반환 하는 GitHub Actions에서 실행되는 간단한 명령을 만들고 있습니다 .

문제가 없어도 실패하거나, 문제가 있어도 실패하지 않는 것 같아요.

이것은 내 전체 명령입니다.

find . -name "Makefile" -exec sh -c 'cd "$(dirname "$0")" && make' {} \; | grep -zqvE "Error 1"

exit 1이와 같은 출력이 발견되면 다음을 수행하고 싶습니다.

ld: symbol(s) not found for architecture arm64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [compile] Error 1

아니면 0다른 상황

답변1

! find ...as in the question... | grep -qF 'Error 1'

처음에는 !파이프의 종료 상태가 무효화됩니다. 파이프의 종료 상태는 명령의 종료 상태이며 해당 문자열이 명령의 출력에 있는 경우 0입니다 grep.Error 1find

따라서 Error 1출력에서 ​​발견 되면 grep0 종료 상태로 종료하고 !0이 아닌 값으로 반전합니다.

진단 메시지 는 make표준 오류 스트림에 기록될 수 있으며, 이 경우 다음을 사용하여 출력을 리디렉션해야 합니다 2>&1.

! find ...as in the question... 2>&1 | grep -qF 'Error 1'

또한 grep일치 항목이 발견되면 종료하고 find데드 파이프에 쓰기를 시도하면 SIGPIPE 신호 수신으로 인해 종료됩니다.


grep와 함께 사용하려고 합니다 -v. -v"이 패턴과 일치하지 않는 행이 있습니까?"라는 질문 으로 생각하면 됩니다 . 이 경우에는~ 할 것이다Error 1발생 여부에 관계없이 행 불일치입니다 Error 1.

관련 정보