Каков наиболее надежный способ анализа файла debian/changelog
исходного пакета (или debian/control
?) Для получения номера версии пакета? Что-то вроде:
pkgver=$(dpkg-parsechangelog | magic_goes_here)
Я хочу извлечь номер версии (и только номер версии), чтобы я мог манипулировать им в сценарии.
Я ожидал найти утилиту dpkg-*
для этой цели, но пока не нашел.
Если у вас версия 1.17.0 или более поздняя, вы можете использовать
dpkg-parsechangelog --show-field Version
Больше не нужно обрабатывать вывод. Эта версия (февраль 2014 г.) доступна в тестировании Debian.
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] форматы, для всех практических общих целей, никогда не используются).
Есть множество способов сделать это.
dpkg-parsechangelog | sed -n 's/^Version: //p'
или альтернативно:
dpkg-parsechangelog | grep Version: | cut -d' ' -f2-
Как я уже видел, версия пакета находится в заголовочной части файла журнала изменений. так что вы можете сделать это как
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:~$