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

  • Как извлечь положительные числа в первом столбце из вывода, как в вопросе?
  • что такое различие между «$ var» и «$ {var}»
  • Использовать функцию bash в конвейерной команде
  • выполнение псевдонимов переменной в 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

    Почему не ставится elinks в фоновом режиме, а затем возобновляется с `fg` работать надежно?

    Предупреждения при открытии программ через вызовы подпроцесса Python

    Найдите процесс, который использует максимальное использование ЦП, если использование ЦП составляет более 60%?

    QCad успешно установлен, но не запускается

    Grep не возвращает идентичные совпадения из awk pipe

    read -a array -d '\ n' <foo, код выхода 1

    Это ошибка в bash? `return` не выходит из функции, если вызывается из канала

    Потерянные файлы, скопированные на USB-накопитель USB на Ubuntu

    Использование Putty / plink для scp для именованного канала

    Работа с ошибкой клавиатуры / взлом входного потока?

    Почему использование служебной команды работает в системном дистрибутиве?

    Почему нет других дистрибутивов / спинов на базе openSuSE?

    Как узнать, загружаюсь ли я с использованием UEFI?

    Обеспечить меньшее очищение экрана

    Solaris / bin / sh поиск файла ведет себя иначе, чем выполнение файла. Зачем?

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