2011-12-09 40 views
2

我怎麼能知道什麼是spec文件的子包? 是否有任何宏擴展到包+子包的列表?RPM:查找spec中的子包名稱

我不想用grep,因爲子包可以使用-n甚至由另一個宏定義(這會導致重新EVAL吧)

例子來進行說明:

$ rpmbuild project.spec --eval '%packages_list' 
+0

我不相信rpm命令支持這種查詢。 –

回答

0

好,我用了一下SED,但因爲我還用rpmspec先展開宏這應該還算OK:

$ export SPEC_FILE=maven-surefire.spec 
$ rpmspec -P $SPEC_FILE | grep '^%package' | sed "s/-n //;t end;s/^/${SPEC_FILE/.spec}-/;:end;s/%package //" 

注意,那就需要basename呼叫工作與路徑,但否則應該是相當錯誤彈性。

+0

嗯,對我來說不可行,因爲我的工作環境默認沒有安裝rpmspec(可能是因爲它是rpm-4.8.0-12.el6.x86_64?) – Caruccio

1

python的一小部分將爲你做的工作。我相信RPM的4.8也有蟒蛇與規格對象綁定(假設與+ X設置和名稱specinfo.py文件):

#!/usr/bin/python                           
import sys 
import rpm 
spec = rpm.spec(sys.argv[1]) 
for subpackages in spec.packages: 
    print subpackages.header["name"] 

可以用來獲取所有子包。

python specinfo.py <spec file> 
0

我一般用簡單的形式:您可以在規範文件中相同的目錄中運行此命令

rpm -q --specfile FILENAME.SPEC 
1

轉-q --queryformat = 「%{NAME} \ n」 - -specfile project.spec