내가 만들면
svn log | head
10번째 출력 줄 다음에 오류 메시지가 나타납니다.
svn: Write error: Broken pipe
여기서 무슨 일이 일어나고 있는 걸까요? 나는 그것과 함께 사용된 다른 명령을 본 적이 없습니다 head
. Subversion은 Unix 필터링 패러다임에 적합하지 않습니까?
답변1
반대쪽 끝이 닫힌 파이프에 쓸 때 일반적으로 SIGPIPE 신호를 받고 죽습니다. 그러나 이전처럼 신호를 무시하기로 선택한 경우 svn
돌아가서 write
영어 번역을 "Broken Pipeline"으로 설정하십시오 -1
. 표준 출력에 무언가를 쓸 수 없을 때 해당 오류 메시지를 표시하도록 선택합니다 .errno
EPIPE
svn
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
)을 확인하고 업그레이드를 고려하십시오...