Quando você escreve em um tubo cuja outra extremidade foi fechada, você normalmente recebe um sinal SIGPIPE e morre. No entanto, se você optar por ignorar esse sinal, como svn
, em vez disso, o write
retornará com -1
e errno
definido como EPIPE
cuja tradução em inglês será "Broken pipe". E svn
escolhe exibir essa mensagem de erro quando falhar em gravar algo em sua saída padrão.
head
termina depois de ter escrito 10 linhas de sua entrada e, como resultado, fecha o canal. svn
não poderá mais escrever nesse pipe. A maioria das aplicações morre silenciosamente como o comportamento padrão quando não está ignorando o SIGPIPE. svn
por algum motivo (talvez porque precise fazer coisas extras antes de morrer) opta por ignorar o SIGPIPE e determinar que ele não pode mais escrever no pipe verificando o status de erro do write
para o pipe. / p>
Você recebe o mesmo erro com:
bash -c 'trap "" PIPE; while echo foo; do :;done' | head
Veja:
strace -e write seq 10000 | head
(no Linux) para ver qual é o comportamento padrão quando você não está ignorando o SIGPIPE.