为什么这个用于更新所有 pip 包的 bash 别名停止工作



我已经使用这个命令很长一段时间了,直到最近它工作得很好。

alias pipup='sudo pip install --upgrade $(yolk -U | awk "{print $1} ")'

但是,每当包具有可用更新时,它最近开始失败并显示以下输出:

Exception:
Traceback (most recent call last):
  File "/usr/local/Cellar/python/2.7.6/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pip/basecommand.py", line 122, in main
    status = self.run(options, args)
  File "/usr/local/Cellar/python/2.7.6/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pip/commands/install.py", line 257, in run
    InstallRequirement.from_line(name, None))
  File "/usr/local/Cellar/python/2.7.6/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pip/req.py", line 172, in from_line
    return cls(req, comes_from, url=url, prereleases=prereleases)
  File "/usr/local/Cellar/python/2.7.6/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pip/req.py", line 70, in __init__
    req = pkg_resources.Requirement.parse(req)
  File "/usr/local/Cellar/python/2.7.6/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pip/_vendor/pkg_resources.py", line 2606, in parse
    reqs = list(parse_requirements(s))
  File "/usr/local/Cellar/python/2.7.6/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/pip/_vendor/pkg_resources.py", line 2532, in parse_requirements
    raise ValueError("Missing distribution spec", line)
ValueError: ('Missing distribution spec', '(1.5.4)')
Storing debug log for failure in /Users/Bryson/.pip/pip.log

此别名在此实例中执行的 yolk -U 命令的输出为:

[14:05] Bryson@Zeus ~ :$ yolk -U
 pep8 1.5.3 (1.5.4)
 setuptools 3.4.1 (3.4.3)
[14:06] Bryson@Zeus ~ :$ 

yolk 没有返回软件包名称/版本时,该命令会正确输出以下内容,并且别名命令不会失败。相反,以下内容将正确打印到终端:

No newer packages found at The Cheese Shop
You must give at least one requirement to install (see "pip help install")

您的问题是awk "{print $1} "中的$1被内插为变量,导致命令awk "{print }"被执行。后一个命令打印整行(而不仅仅是第一个字段),因此(1.5.4)出现在pip的命令行上。

它可能工作了一段时间,因为yolk -U没有输出任何东西。

要修复,您可以转义$

alias pipup='sudo pip install --upgrade $(yolk -U | awk "{print $1}")'

或者只是使用cut

alias pipup='sudo pip install --upgrade $(yolk -U | cut -d" " -f 2)'

最新更新