如何从 debian/changelog 中提取软件包版本?

如何从 debian/changelog 中提取软件包版本?

解析源包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:~$ 

相关内容