Какой самый надежный способ анализа debian/changelog
файла исходного пакета (или debian/control
?), Чтобы получить номер версии пакета? Что-то вроде:
pkgver=$(dpkg-parsechangelog | magic_goes_here)
Я хочу извлечь номер версии (и только номер версии), чтобы я мог манипулировать им в сценарии.
Я ожидал найти dpkg-*
утилиту для этой цели, но я еще не нашел ее.
packaging
deb
source-packages
Ричард Хансен
источник
источник
Есть множество способов сделать это.
dpkg-parsechangelog | sed -n 's/^Version: //p'
или альтернативно:
dpkg-parsechangelog | grep Version: | cut -d' ' -f2-
источник
deb-control(5)
страница руководства не дает четкого описания формата, и я не хочу делать никаких предположений. Например, он не дает понять, что поля должны начинаться со строки («Поля ограничиваются только тегами полей»). В нем также говорится, что поле может занимать несколько строк, и ничего не говорится о расстоянии между тегом и значением, поэтому, возможно, егоVersion:123
следует интерпретировать как продолжение предыдущего поля, а не отдельное поле версии (из-за отсутствия пространства после двоеточия).dpkg-parsechangelog
будут выглядеть так:Version: 0.6.11-2
если вы хотите что-то сделать для более надежного разбораdebian/control
формата, вы можете использоватьpython-debian
илиlibparse-debcontrol-perl
.dpkg-parsechangelog
работает, и более ранний ответ, передающий вывод через sed / grep, должен быть полностью устойчивым. Если вы хотите узнать точные детали форматаdpkg-parsechangelog
вывода и большинства других управляющих файлов в стиле debian, см. RFC 822 . Никогда не допустимо, чтобы версия пакета deb содержала символ новой строки, пробел или любые другие специальные или управляющие символы (см.man deb-version
), ПоэтомуVersion: blah
строка " " в выходных данных всегда будет присутствовать и всегда будет одной строкой в ее своя.Тем не менее,
dpkg-parsechangelog
это очень тяжелая программа, запускаемая только для получения номера текущей версии из журнала изменений. Он должен запустить Perl и загрузить впечатляюще большое количество библиотек, чтобы получить результат, большинство из которого вы не будете использовать. На более медленных платформах или с медленными носителями для файлов, или когда вам нужно много раз анализировать эту версию, она будет мучительно медленной. Вместо этого просто используйте все, что находится в первом наборе скобок в первой строке:Это даст вам правильную текущую версию пакета с любым допустимым
changelog
файлом, использующим стандартный формат (а нестандартныеdebian/changelog
форматы, для всех практических общих целей, никогда не используются).источник
Как я уже видел, версия пакета находится в заголовочной части файла журнала изменений. так что вы можете сделать это как
Я пробовал эту команду для установленных пакетов, например
&
источник