grepping 输出时管道损坏,但仅使用 -i 标志

Joh*_*ard 8 grep pipe case-sensitivity pip

我试图通过 grep 输出pip list. 如果我试试这个

pip list | grep -q $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
Run Code Online (Sandbox Code Playgroud)

这似乎是python方面的一个错误,忽略大小写的grepm标志与pip发送信息的能力有什么关系?

这是在运行 Raspberry Pi 3pip 1.5.6 from /usr/lib/python2.7/dist-packages (python 2.7)grep (GNU grep) 2.20.

Ste*_*ris 13

有了-q标志,grep当第一行数据匹配时,程序将立即停止。

但是pip可能仍在尝试将数据发送到管道中。它将收到一个 SIGPIPE。这会导致错误回溯。

有了-i标志,grep进程可能会在pip完成写出结果之前更快地停止(较早的匹配)。

通常你不应该-q在这样的管道中使用,除非你确定另一端的程序可以处理 SIGPIPE。

所以pip list | grep -i $packagename会正常工作。

  • 退出代码将相同;您可以执行 `grep -i $packagename &gt;/dev/null` 来丢弃输出。 (3认同)