찾기 및 grep 파이프라인에 대한 신호 13(SIGPIPE) 오류 수정

찾기 및 grep 파이프라인에 대한 신호 13(SIGPIPE) 오류 수정

시스템에 소프트웨어를 설치하려고 하는 상황에 직면했습니다.

나는 fakeroot 방법을 사용하여 별도의 디렉터리에 설치했습니다. 여기서는 그들이 설치한 모든 파일, 디렉터리 및 링크를 세 개의 파일에 나열했습니다 FILES.DIRSLINKS

그런 다음 find를 사용하여 이라는 파일에 있는 모든 파일의 SHA1 해시를 가져옵니다 sha1sums. sha1sums파일 자체의 해시는 필요하지 않습니다 . 그래서 이 명령을 사용했습니다.

 find . -type f -exec sha1sum {} \; | grep -ve "\./sha1sums$" >sha1sums

이것은 훌륭하게 작동합니다. 그러나 설치하는 동안 kbd-2.0.3많은 줄 오류가 발생했습니다.

 find: 'sha1sum' terminated by signal 13

나는 신호 13이 SIGPIPE신호("깨진 파이프")라는 것을 알고 있습니다. 그러나 나는 두 가지를 이해하지 못합니다.

  1. 왜 이 패키지에서만 이런 일이 발생합니까?
  2. 이는 grep읽기 파이프를 닫아서 발생할 수 있습니다. 그런데 왜 닫아?

답변1

귀하가 사용하는 모든 유틸리티의 GNU 버전이나 기본 OpenBSD 유틸리티를 사용하여 실제로 문제를 재현할 수는 없습니다. 디스크가 파손된 것이 아닐까요?

그러나 특정 파일에 대한 SHA1 다이제스트 계산을 생략하고 대신 sha1sums파이프를 통해 파일 이름을 필터링할 수 있습니다.grep

find . -type f ! -path './sha1sums' -exec sha1sum {} + >sha1sums

부정적인 테스트는 에 전달된 경로 이름 목록에서 -path경로 이름을 제거 합니다../sha1sumssha1sum

+또한 마지막 때문에 유틸리티는 이름당 한 번이 아니라 한 번에 가능한 많은 파일 이름으로 호출됩니다.

SIGPIPE파이프를 사용하지 않으므로 문제 가 없습니다 .

관련 정보