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

Попробуйте следующее:

sudo apt-get install -y build-essential ruby ruby-dev
sudo env REALLY_GEM_UPDATE_SYSTEM=1 gem update --system
sudo gem install bundler
mkdir ~/test
cd ~/test
echo "source 'https://rubygems.org'" > Gemfile
echo "gem 'rake'" >> Gemfile
bundle install
1
задан 15 August 2013 в 10:07

3 ответа

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

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

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

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

7
ответ дан 24 May 2018 в 19:01
  • 1
    Я надеялся на что-то более сильное - в man-странице deb-control(5) нет четкого описания формата, и я не хочу делать никаких предположений. Например, он не дает понять, что поля должны начинаться с строки («Поля ограничены только тегами полей».). В нем также говорится, что поле может охватывать несколько строк, и оно ничего не говорит о расстоянии между тегом и значением, поэтому, возможно, Version:123 следует интерпретировать как продолжение предыдущего поля, а не отдельное поле Version (due к отсутствию пространства после толстой кишки). – Richard Hansen 15 August 2013 в 21:56
  • 2
    На практике вывод из dpkg-parsechangelog будет выглядеть как Version: 0.6.11-2. Если вы хотите что-то сделать более надежный синтаксический разбор debian/control, вы можете использовать python-debian или libparse-debcontrol-perl. – andrewsomething 15 August 2013 в 23:55

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

1
ответ дан 24 May 2018 в 19:01

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

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:~$ 
-1
ответ дан 24 May 2018 в 19:01
  • 1
    Я хочу, чтобы номер версии и только номер версии, чтобы я мог манипулировать ею в скрипте. – Richard Hansen 15 August 2013 в 09:55

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

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