Как извлечь версию пакета из debian / changelog?

9

Какой самый надежный способ проанализировать файл debian/changelog исходного пакета (или debian/control ?), чтобы получить номер версии пакета? Что-то вроде:

pkgver=$(dpkg-parsechangelog | magic_goes_here)

Я хочу извлечь номер версии (и только номер версии), чтобы я мог манипулировать ею в скрипте.

Я ожидал найти утилиту dpkg-* для этой цели, но я еще не нашел ее.

    
задан Richard Hansen 15.08.2013 в 02:13
источник

4 ответа

16

Если у вас есть версия 1.17.0 или новее, вы можете использовать

dpkg-parsechangelog --show-field Version

Нет необходимости обрабатывать вывод дальше. Эта версия в настоящее время (февраль 2014 года) доступна в Debian Testing.

    
ответ дан Martin Geisler 20.02.2014 в 08:07
источник
7

Существует множество способов сделать это.

dpkg-parsechangelog | sed -n 's/^Version: //p'

или, альтернативно:

dpkg-parsechangelog | grep Version: | cut -d' ' -f2-

    
ответ дан andrewsomething 15.08.2013 в 15:28
1

dpkg-parsechangelog работает, а более ранний ответный вывод вывода через sed / grep должен быть полностью надежным. Если вы хотите узнать точную информацию о формате выхода dpkg-parsechangelog и большинстве других файлов управления в стиле debian, см. RFC 822 . В версии пакета deb никогда не бывает хорошо содержать новую строку, пробел или любые другие специальные или управляющие символы (см. man deb-version ), поэтому строка « Version: blah » на выходе всегда будет присутствовать, и она всегда будет быть отдельной линией.

Однако, dpkg-parsechangelog - тяжелая программа very для запуска только для получения текущего номера версии из журнала изменений. Он должен запускать Perl и загружать впечатляюще большое количество библиотек, чтобы дать вам результат, большинство из которых вы не будете использовать. На более медленных платформах или с медленными файлами хранения файлов, или когда вам нужно много раз обрабатывать эту версию, это будет довольно болезненно медленным. Вместо этого просто используйте все, что находится внутри первого набора скобок в первой строке:

head -1 debian/changelog | awk -F'[()]' '{print $2}'

Это даст вам правильную версию текущего пакета с любым допустимым файлом changelog с использованием стандартного формата (а нестандартные форматы debian/changelog для всех практических целей никогда не используются).

    
ответ дан the paul 21.08.2013 в 23:23
-1

, поскольку я видел, что версия пакета состоит из заголовочной части файла изменений. поэтому вы можете сделать это как

pkgver=$(dpkg-parsechangelog | head

Я пробовал эту команду для установленных пакетов, например

aptitude changelog shutter | head

& амп;

[email protected]:~$ 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
[email protected]:~$ 
    
ответ дан rɑːdʒɑ 15.08.2013 в 03:31