Erro Fixing Signal 13 (SIGPIPE) para o pipeline find e grep

3

Eu tenho uma situação em que estou tentando instalar software no meu sistema.

Estou usando uma abordagem fakeroot para instalá-los em um diretório separado no qual estou listando todos os arquivos, diretórios e links que eles instalam em três arquivos FILES , DIRS , LINKS .

Então estou usando find para obter hashes SHA1 de todos os arquivos em um arquivo chamado sha1sums . Eu não quero o hash do arquivo sha1sums em si. Então eu usei esse comando

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

Isso funcionou bem. No entanto, ao instalar o kbd-2.0.3 , ele apresentou muitas linhas de erro -

 find: 'sha1sum' terminated by signal 13

Sei que o sinal 13 é o sinal SIGPIPE ("Broken Pipe"). Mas eu não entendo duas coisas:

  1. Por que isso acontece apenas com este pacote?
  2. Isso provavelmente está sendo causado por grep fechando o canal de leitura. Mas por que isso está fechando?
por Aniket Bhattacharyea 03.05.2016 / 06:46

1 resposta

1

Eu não consigo reproduzir o seu problema com as versões GNU de todos os utilitários que você usa, nem com os meus utilitários nativos do OpenBSD. Poderia ser um disco ruim?

No entanto, em vez de filtrar o nome do arquivo sha1sums passando por grep , você pode omitir o cálculo do resumo SHA1 para esse arquivo em particular:

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

O teste -path negado removerá o nome do caminho ./sha1sums da lista de nomes de caminho transmitidos para sha1sum .

Além disso, o utilitário será chamado com tantos nomes de arquivo quanto possível de uma só vez, em vez de uma vez para cada nome, graças ao + no final.

Como isso não está usando um pipeline, não haverá SIGPIPE issue.

    
por 28.09.2017 / 23:56