2011-02-10 82 views
0

我寫了一個腳本,做這一點,但它是我的第一個劇本的人曾經讓我確信有更好的辦法:)腳本遞歸查詢並選擇依賴

讓我知道你將如何去關於這樣做。
我正在尋找一個簡單而有效的方法來做到這一點。

下面是一些重要的背景信息:
(這可能是一個有點混亂,但希望通過年底它纔有意義。)

1)這顯示了相關迪爾斯和文件的結構/位置。

main dir 
+-- config 
    +-- default 
    +-- config 
     +-- config.file 
     +-- package.file 
+-- package 
    +-- $b 
    +-- $a 
     +-- $a.cache file 
+-- scripts 
    +-- 40+ scripts 

2)位於./config/default/config/packages的packages.file是空格分隔的文件。
field5是「包名稱」,爲了說明起見,我將其稱爲$a
field4中是包含$a迪爾的選定和「O」(資本名稱.DIR如果選擇包或沒有,
「X」(資本x)的我將調用$b
field1的節目O爲中橙色)未選擇。

這裏是什麼樣的packages.file可能包含一個例子:)

... 
X ---3------ 104.800 database gdbm 1.8.3/base/library CROSS 0 
O -1---5---- 105.000 base libiconv 1.13.1/base/tool CROSS 0 
X 01---5---- 105.000 base pkgconfig 0.25/base/tool CROSS 0 
X -1-3------ 105.000 base texinfo 4.13a/base/tool CROSS DIETLIBC 0 
O -----5---- 105.000 develop duma 2_5_15/base/development CROSS NOPARALLEL 0 
O -----5---- 105.000 develop electricfence 2_4_13/base/development CROSS 0 
O -----5---- 105.000 develop gnupth 2.0.7/extra/development CROSS NOPARALLEL FPIC-QUIRK 0 
... 

3幾乎每包中的「packages.file」上市有一個相應的「.cache文件」
的。$ a包的.cache文件位於./package/$b/$a/$a.cache
.cache文件包含該特定包的依賴項列表。

下面是一個.cache文件的示例。
注意的依賴是包含「[DEP]」
這些依賴包的所有名稱中的「package.file」

[TIMESTAMP] 1134178701 Sat Dec 10 02:38:21 2005 
[BUILDTIME] 295 (9) 
[SIZE] 11.64 MB, 191 files 

[DEP] 00-dirtree 
[DEP] bash 
[DEP] binutils 
[DEP] bzip2 
[DEP] cf 
[DEP] coreutils 
... 

因此,所有考慮到這一點的行場2 ... 我在找一個shell腳本:

從‘主目錄’
着眼於./config/default/config/packages文件
,發現了‘選擇’套餐
和內讀取correspo nding .cache
然後在./config/default/config/packages文件
編譯排除已經選擇的套餐
然後選擇依賴依賴列表(通過改變字段1到X)和重複,直到所有的依賴都滿足

注意:該腳本最終將在「腳本目錄」中結束,並從「主目錄」中調用。

如果這不清楚,讓我知道需要澄清什麼。

對於那些有興趣的人,我正在玩T2 SDE
如果你正在玩Linux,可能值得一看。
如果你打算爲我發佈一個腳本,請確保它很好的評論,以幫助我學習。

回答

1

tl'dr :)但大約一個星期前,我需要一個輕量級的便攜式依賴求解器。我已經考慮過portage - 這太ophidian,可以這麼說。然後我看看opkgOpkg幾乎奏效,但後來我讀了一些不尋常的方式來使用make,最後我對make感到滿意。它是可移植的,可以做任何我需要的東西(具有適當的Makefile),並且它具有天生的能力來挖掘依賴關係。

坦率地說,在shell中編寫依賴求解器的想法嚇壞了我,並且懶惰,我寧願使用已經存在的東西。