【问题标题】:FreeBSD package version infoFreeBSD 软件包版本信息
【发布时间】:2013-06-20 13:53:25
【问题描述】:

我有一个用 perl 编写的脚本,它收集有关通过端口安装的软件包的信息。不幸的是,似乎没有一种功能性、简单的方法来确定端口的版本。当然,你可以使用这个:

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 等来执行此操作,但如果可以避免,我不想这样做。

请让我知道你们能想出什么,因为我发现这方面的信息很难找到。

附:这是一些信息:

FreeBSD 版本:9.1 拱门:x64 Perl 版本:5.14.2 (amd64-freebsd-thread-multi)

如果有人可以为端口添加标签,那就太好了,因为它还不存在。

【问题讨论】:

    标签: perl freebsd


    【解决方案1】:

    您可以使用opendir/readdir 直接检查/var/db/pkg 中的包数据库。

    【讨论】:

    • 我假设您指的是使用目录名称来确定版本,对吧?例如,包“blah”的目录为“blah-1.1.1_3”
    • 是的,没错。它假设pkg_* 工具已经正确地完成了他们的内务管理,但是如果你允许他们犯这个错误,那么你就会有很多其他可能的问题。
    • 是的,确实如此。这当然是野兽的本性。我当然需要尽我的职责,写一些花哨的健全性检查,以确保这不会失控。谢谢您的帮助。 :)
    • 在这方面工作了一段时间,我不太确定我是否喜欢这种方法。不幸的是,这有点不可靠,即假设我们有 blah-1.2.3.4_1 和 bleh-1.4.3.2,这需要大量的正则表达式构建,这可能被证明是徒劳的。任何其他可以通过 pkg_* 脚本作为参数运行的想法?
    • @RubyisChai:为什么不是my ($pkg, $ver) = split /-/这个简单的问题?
    猜你喜欢
    • 2012-02-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-23
    • 2011-04-15
    • 2012-01-25
    • 1970-01-01
    相关资源
    最近更新 更多