2013-06-24 86 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 拱:64 Perl版本:5.14.2(AMD64技術的FreeBSD線程多)

如果有人可以添加端口的標籤,這會是很好,因爲它還不存在。

回答

1

您可以直接使用opendir/readdir檢查/var/db/pkg中的包數據庫。

+0

我假設你指的是利用目錄名來確定版本,對吧?例如,包「blah」有目錄「blah-1.1.1_3」 –

+0

是的。它假設'pkg_ *'工具已經正確地完成了他們的內務管理,但是如果你允許他們錯誤的話,那麼你還有其他一些可能的問題。 – Borodin

+0

是的,確實如此。這當然是野獸的本質。我當然需要盡我的責任,並寫一些奇特的理智檢查,以確保它不會失控。謝謝您的幫助。 :) –