Answers:
有很多方法可以做到这一点。
dpkg-parsechangelog | sed -n 's/^Version: //p'
或者:
dpkg-parsechangelog | grep Version: | cut -d' ' -f2-
deb-control(5)
手册页中没有明确描述格式,我也不想做任何假设。例如,它并不清楚字段必须在一行上开始(“字段仅由字段标签定界。”)。它还说一个字段可以跨越多行,并且没有说明标签和值之间的间距,因此Version:123
应该将其解释为前一个字段的延续,而不是单独的Version字段(由于缺少)冒号后面的空格)。
dpkg-parsechangelog
看起来像Version: 0.6.11-2
如果您想对debian/control
格式进行更健壮的解析,则可以使用python-debian
或libparse-debcontrol-perl
。
dpkg-parsechangelog
工作,并且较早的答案通过sed / grep传递输出应该完全可靠。如果您想知道dpkg-parsechangelog
输出格式以及大多数其他debian风格的控制文件的确切细节,请参阅RFC 822。deb软件包的版本中不能包含换行符,空格或任何其他特殊或控制字符(请参阅参考资料man deb-version
),因此Version: blah
输出中的“ ”行将始终存在,并且在其输出中始终为一行拥有。
但是,这dpkg-parsechangelog
是一个非常繁重的程序,只能从更改日志中获取当前版本号。它必须运行Perl并加载大量库,以便为您提供结果,而您绝不会使用其中的大多数库。在速度较慢的平台上,或在文件存储媒体速度较慢的情况下,或者当您需要多次对此版本进行解析时,事实证明它会非常痛苦。相反,只需使用第一行第一组括号内的内容即可:
head -1 debian/changelog | awk -F'[()]' '{print $2}'
这将为您提供正确的当前软件包版本,以及changelog
使用标准格式的任何有效文件(debian/changelog
对于所有实际通用目的,从不使用非标准格式)。
如我所见,软件包版本位于changelog文件的标头部分。所以你可以像
pkgver=$(dpkg-parsechangelog | head
我已经尝试过此命令来安装软件包,例如
aptitude changelog shutter | head
和
jai@frank-Jai:~$ aptitude changelog shutter | head
Get: Changelog of shutter
shutter (0.89.0-0ubuntu1) quantal; urgency=low
* New upstream release.
- Adds an AppIndicator (LP: #805464).
* debian/control: Recommend libgtk2-appindicator-perl
-- Andrew Starr-Bochicchio <a.starr.b@gmail.com> Sat, 11 Aug 2012 17:36:18 -0400
shutter (0.88.3-1) unstable; urgency=low
jai@frank-Jai:~$