헤드를 배관할 때 Subversion에서 파이프 파손 오류가 발생하는 이유는 무엇입니까?

헤드를 배관할 때 Subversion에서 파이프 파손 오류가 발생하는 이유는 무엇입니까?

내가 만들면

svn log | head

10번째 출력 줄 다음에 오류 메시지가 나타납니다.

svn: Write error: Broken pipe

여기서 무슨 일이 일어나고 있는 걸까요? 나는 그것과 함께 사용된 다른 명령을 본 적이 없습니다 head. Subversion은 Unix 필터링 패러다임에 적합하지 않습니까?

답변1

반대쪽 끝이 닫힌 파이프에 쓸 때 일반적으로 SIGPIPE 신호를 받고 죽습니다. 그러나 이전처럼 신호를 무시하기로 선택한 경우 svn돌아가서 write영어 번역을 "Broken Pipeline"으로 설정하십시오 -1. 표준 출력에 무언가를 쓸 수 없을 때 해당 오류 메시지를 표시하도록 선택합니다 .errnoEPIPEsvn

head입력에서 10줄을 쓴 후 종료되어 파이프가 닫힙니다. svn더 이상 파이프에 아무것도 쓸 수 없습니다. SIGPIPE가 무시되지 않으면 대부분의 애플리케이션은 기본 동작으로 자동 종료됩니다. 어떤 이유로(아마도 죽기 전에 추가 작업을 수행해야 하기 때문에) SIGPIPE를 무시하기로 선택하고 svn파이프의 오류 상태를 확인하여 더 이상 파이프에 쓸 수 없다고 결정합니다.write

동일한 오류가 발생합니다.

bash -c 'trap "" PIPE; while echo foo; do :;done' | head

바라보다:

strace -e write seq 10000 | head

(Linux의 경우) SIGPIPE를 무시하지 않을 때의 기본 동작을 확인하세요.

답변2

이는 오랫동안 지속된 Subversion 문제입니다(2007년에 처음 보고되었으며 2011년까지 수정되지 않았습니다). svn 개발자가 이를 수정하지 않는 데 그렇게 오랜 시간이 걸린 이유는 완전히 명확하지 않지만 다음을 포함하여 모든 피투성이의 세부 사항을 읽을 수 있습니다.이 문제는 1.7.0에서 수정되었습니다., 연결된 버그 보고서에서. 따라서 이 동작이 실제로 문제가 된다면 svn 클라이언트 버전( svn --version)을 확인하고 업그레이드를 고려하십시오...

관련 정보