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

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

pkgver=$(dpkg-parsechangelog | magic_goes_here)

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

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

11
задан 15 August 2013 в 09:07

4 ответа

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

dpkg-parsechangelog --show-field Version

Больше не нужно обрабатывать вывод. Эта версия (февраль 2014 г.) доступна в тестировании Debian.

0
ответ дан 15 August 2013 в 09:07

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, используя стандартный формат (и нестандартный [ 117] форматы, для всех практических общих целей, никогда не используются).

0
ответ дан 15 August 2013 в 09:07

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

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

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

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

0
ответ дан 15 August 2013 в 09:07

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

pkgver=$(dpkg-parsechangelog | head

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

aptitude changelog shutter | head

& amp;

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:~$ 
0
ответ дан 15 August 2013 в 09:07

Другие вопросы по тегам:

Похожие вопросы: