2013-06-24 3 views
0

У меня есть скрипт, написанный на perl, который собирает информацию о пакетах, которые устанавливаются через порты. К сожалению, похоже, нет функционального и простого способа определить, какая версия порта. Конечно, вы можете использовать это:Информация о версии пакета FreeBSD

pkg_version -v 

Это покажет вам все пакеты, символ, связанный с их состоянием (должен быть обновлен, преуспевает порты и т.д.) и версию она есть.

Поскольку это в сценарии, я действительно не хочу, чтобы это сделать:

my $blah = "pkg_version -v | grep -vE '(up-to-date|succeeds)'|awk '{print \$1}'"; 
# Then make a var and run it through with backticks. 

Что бы дать мне список всех пакетов, чтобы позволить мне, чтобы превратить его в массив, а затем сделать с ним магия. То, что я хотел бы сделать, это просто выяснить, какая версия пакета, а имя пакета.

Опять же, я могу сделать это с помощью труб, awk и т. Д., Но я не хочу, чтобы избежать этого.

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

P.S. Вот некоторая информация:

версия FreeBSD 9.1 Arch: x64 Perl версии: 5.14.2 (amd64-freebsd-нить-мульти)

Если кто-то может добавить тег для портов, которые были бы отлично, так как он еще не существует.

ответ

1

Вы можете изучить базу данных пакета в /var/db/pkg напрямую, используя opendir/readdir.

+0

Я предполагаю, что вы имеете в виду использование имени каталога для определения версии, не так ли? Например, в пакете «бла» есть каталог «blah-1.1.1_3» –

+0

Да, это так. Он предполагает, что инструменты 'pkg_ *' правильно выполнили свою работу, но если вы позволите им сделать это неправильно, у вас будет целый ряд других возможных проблем. – Borodin

+0

Да, действительно. Это, конечно, характер зверя. Я должен буду выполнить свой долг и написать некоторые причудливые проверки здравомыслия, чтобы гарантировать, что это не сходит с ума. Спасибо за помощь. :) –