Ошибка фиксации сигнала 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 закрывает трубу чтения. Но почему он закрывает его?

  • Какой приоритет я должен дать скрипту, запущенному при запуске?
  • Как создать исполняемый скрипт bash для этих команд?
  • Как использовать аргументы командной строки в сценарии оболочки
  • Цитирование вывода команды backtick
  • Создать в HTML из вывода скрипта bash
  • Подключение через telnet и выполнение определенных операций
  • Отправьте EOF на именованный канал - очистка / высыхание fifo
  • Печатать аргументы оболочки в обратном порядке
  • 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 не будет.

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