解析源包debian/changelog
文件(或debian/control
?)以获取包的版本号的最可靠方法是什么?类似于:
pkgver=$(dpkg-parsechangelog | magic_goes_here)
我想提取版本号(和仅有的我可以使用以下命令将我保存为一个临时文件(英语:版本号),以便我可以通过脚本对其进行操作。
我原本希望找到一个dpkg-*
可以用于此目的的实用程序,但至今还没找到。
答案1
如果你有 1.17.0 或更高版本,你可以使用
dpkg-parsechangelog --show-field Version
无需进一步处理输出。此版本目前(2014 年 2 月)在 Debian Testing 中可用。
答案2
有很多方法可以做到这一点。
dpkg-parsechangelog | sed -n 's/^Version: //p'
或者:
dpkg-parsechangelog | grep Version: | cut -d' ' -f2-
答案3
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
就所有实际的一般用途而言,非标准格式从未使用过)的任何有效文件获得正确的当前软件包版本。
答案4
正如我所见,软件包版本包含在变更日志文件的标题部分。因此您可以这样做
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 <[email protected]> Sat, 11 Aug 2012 17:36:18 -0400
shutter (0.88.3-1) unstable; urgency=low
jai@frank-Jai:~$