Ошибка фиксации сигнала 13 (SIGPIPE) для поиска и grep-конвейера

У меня есть ситуация, когда я пытаюсь установить программное обеспечение в свою систему.

Я использую подход fakeroot, чтобы установить их в отдельный каталог, где я перечисляю все файлы, каталоги и ссылки, которые они устанавливают, в три файла FILES , DIRS , LINKS .

Затем я использую 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 («Broken Pipe»). Но у меня нет двух вещей:

  1. Почему это происходит только с этим пакетом?
  2. Вероятно, это связано с тем, что grep закрывает трубу чтения. Но почему он закрывает его?

  • объединение имен файлов в переменную
  • «. ~ / .bashrc "не устанавливает переменные, как ожидалось, в вызывающем скрипте
  • Входной сигнал Bash
  • Может ли постоянное присвоение переменной в сценарии оболочки вызвать утечку памяти?
  • Вставка текста в файл с использованием сценариев bash (НЕ добавление)
  • Почему эти бомбы вилки-ракеты работают по-разному, и каково значение & в ней?
  • перечислить все файлы, более новые, чем заданные временные метки, и отсортировать их
  • Выберите содержимое, соответствующее определенному контенту из файла, и переместите его в выходной файл
  • One Solution collect form web for “Ошибка фиксации сигнала 13 (SIGPIPE) для поиска и grep-конвейера”

    Я не могу воспроизвести вашу проблему с версиями GNU всех утилит, которые вы используете, и с моими родными утилитами OpenBSD.

    Однако, вместо того, чтобы sha1sums имя файла sha1sums с помощью sha1sums через grep , вы можете вообще не sha1sums вычисление SHA1 для этого файла:

     find . -type f ! -name sha1sums -exec sha1sum {} + >sha1sums 

    Тест negated -name удалит имя файла из списка имен, переданных в sha1sum .

    Кроме того, утилита будет вызываться с максимально возможным количеством файлов за один раз, а не один раз для каждого имени, благодаря + в конце.

    Поскольку это не использует конвейер, проблема с SIGPIPE не будет.

    Interesting Posts
    Linux и Unix - лучшая ОС в мире.