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会正常工作。