用于递归检查和选择依赖项的脚本

时间:2011-02-10 20:23:48

标签: linux bash shell dependencies

我编写了一个脚本来执行此操作,但它是我的第一个脚本之一,所以我相信有更好的方法:)

让我知道你将如何做到这一点 我正在寻找一种简单而有效的方法来实现这一目标。

以下是一些重要的背景信息:
(这可能有点令人困惑,但希望到最后它会有意义。)

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的目录的名称.dir我将调用$b
field1显示是否选择了包,
选择的“X”(大写x)和未选择的“O”(大写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]”
的行的field2 这些依赖项是“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
... 

所有这一切...... 我正在寻找一个shell脚本:

从“主目录”内 查看./config/default/config/packages文件
并找到“选定”的包裹 并读取相应的.cache
然后编译一个依赖项列表,排除已经选择的包 然后在./config/default/config/packages文件中选择依赖关系(通过将field1更改为X) 并重复,直到满足所有依赖关系

注意:脚本最终会以“脚本目录”结尾,并从“主目录”调用。

如果不清楚,请告诉我需要澄清的内容。

对于那些感兴趣的人,我正在玩T2 SDE 如果你正在玩linux,可能值得一看 如果你要为我发布一个剧本,请确保它有很好的评论,以帮助我学习。

1 个答案:

答案 0 :(得分:1)

tl'dr :)但是大约一周前我需要一个轻量级的便携式依赖解算器。我已经调查了portage - 这太过于奥利式,所以说。然后我看了opkgOpkg几乎有效,但后来我读到了一些使用make的不寻常方法,最后我对make感到满意。它是可移植的,可以做任何我需要的东西(使用适当的Makefile),并且它具有与生成依赖关系的天生能力。

坦率地说,在shell中编写依赖项求解器的想法让我感到害怕,而且我很懒,我宁愿使用已经存在的东西。