我编写了一个脚本来执行此操作,但它是我的第一个脚本之一,所以我相信有更好的方法:)
让我知道你将如何做到这一点 我正在寻找一种简单而有效的方法来实现这一目标。
以下是一些重要的背景信息:
(这可能有点令人困惑,但希望到最后它会有意义。)
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,可能值得一看 如果你要为我发布一个剧本,请确保它有很好的评论,以帮助我学习。
答案 0 :(得分:1)
tl'dr :)但是大约一周前我需要一个轻量级的便携式依赖解算器。我已经调查了portage
- 这太过于奥利式,所以说。然后我看了opkg
。 Opkg
几乎有效,但后来我读到了一些使用make
的不寻常方法,最后我对make
感到满意。它是可移植的,可以做任何我需要的东西(使用适当的Makefile),并且它具有与生成依赖关系的天生能力。
坦率地说,在shell中编写依赖项求解器的想法让我感到害怕,而且我很懒,我宁愿使用已经存在的东西。