Сломанная труба при выходе grepping, но только с флагом -i

Я пытаюсь проверить, установлена ​​ли определенная библиотека python, grepping вывод pip list . Если я попробую это

pip list | grep -q $package pip list | grep -q $package , он отлично работает. Если я попробую pip list | grep -qi $package pip list | grep -qi $package , я получаю следующий вывод ошибки

 pi@pibox:~ $ pip list | grep -i -q pyyaml Traceback (most recent call last): File "/usr/bin/pip", line 9, in <module> load_entry_point('pip==1.5.6', 'console_scripts', 'pip')() File "/usr/lib/python2.7/dist-packages/pip/__init__.py", line 248, in main return command.main(cmd_args) File "/usr/lib/python2.7/dist-packages/pip/basecommand.py", line 156, in main logger.fatal('Exception:\n%s' % format_exc()) File "/usr/lib/python2.7/dist-packages/pip/log.py", line 111, in fatal self.log(self.FATAL, msg, *args, **kw) File "/usr/lib/python2.7/dist-packages/pip/log.py", line 164, in log consumer.flush() IOError: [Errno 32] Broken pipe 

это, по-видимому, является ошибкой на стороне python вещей, каков бы флаг grepm игнорировать случай, связанный с способностью посылать информацию по трубе?

Это на Raspberry Pi 3 running pip 1.5.6 from /usr/lib/python2.7/dist-packages (python 2.7) и grep (GNU grep) 2.20 .

  • перенаправить вывод tee и grep для нескольких лог-файлов
  • Как передавать данные из одной команды в другую команду, которая разрешает только файл в качестве аргумента?
  • uniq и bash для цикла, не записывающего в stdout перед закрытием stdin (для системы уведомлений посетителей в одной строке)
  • Как открыть файл с наибольшим количеством совпадений для данного регулярного выражения?
  • оптимизировать команду с помощью or или pipe для анализа вывода ifconfig
  • Должен ли я использовать трубопровод или перенаправление для ввода в «сортировку»,
  • pipe ls to grep (строки против «элементов»)
  • Почему PIPESTATUS не работает на конвейерах в рамках подстановки команды
  • One Solution collect form web for “Сломанная труба при выходе grepping, но только с флагом -i”

    С флагом -q программа grep немедленно остановится, когда совпадёт первая строка данных.

    Однако pip все еще может пытаться отправить данные в трубу. Он получит SIGPIPE. И это вызывает отслеживание ошибок.

    С флагом -i возможно, что процесс grep прекратится раньше (раннее совпадение), прежде чем pip завершит запись результатов.

    Обычно вы не должны использовать -q в таком конвейере, если не уверены, что программа на другом конце может обрабатывать SIGPIPE.

    Итак, pip list | grep -i $packagename pip list | grep -i $packagename будет работать без ошибок.

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