Я написал скрипт, который делает это, но это один из моих первых скриптов, поэтому я уверен, что есть лучший способ:)
Дайте мне знать, как бы вы поступили так.
Я ищу простой, но эффективный способ сделать это.
Вот важная справочная информация:
(Это может немного смущать, но, надеюсь, к концу это будет иметь смысл.)
1) Показывает структуру / расположение соответствующих папок и файлов.
main dir
+-- config
+-- default
+-- config
+-- config.file
+-- package.file
+-- package
+-- $b
+-- $a
+-- $a.cache file
+-- scripts
+-- 40+ scripts
2) Package.file, расположенный по адресу ./config/default/config/packages
, представляет собой файл с разделителями-пробелами.
field5 - это «имя пакета», которое я буду называть $a
для объяснения.
field4 - это имя каталога, содержащего $a
.dir, который я назову $b
field1 показывает, выбран пакет или нет,
«X» (заглавная x) для выбранного и «O» (заглавная o, как в оранжевом) для не выбранного.
Вот пример того, что может содержать package.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 file"
Файл .cache для пакета $ a будет расположен по адресу ./package/$b/$a/$a.cache
Файлы .cache содержат список зависимостей для этого конкретного пакета.
Вот пример того, как один из файлов .cache может выглядеть следующим образом.
Обратите внимание, что зависимости - это field2 строк, содержащих «[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
...
Итак, учитывая все это ...
Я ищу сценарий оболочки, который:
Изнутри «главного каталога»
Смотрит на ./config/default/config/packages
файл
и находит "выбранные" пакеты
и читает соответствующий .cache
Затем составляется список зависимостей, исключающий уже выбранные пакеты
Затем выбирает зависимости (изменяя field1 на X) в файле ./config/default/config/packages
и повторяется, пока все зависимости не будут выполнены
Примечание. Сценарий в конечном итоге окажется в «каталоге сценариев» и будет вызываться из «главного каталога».
Если это не ясно, дайте мне знать, что нужно уточнить.
Для тех, кому интересно, я играю с T2 SDE .
Если вы хотите поиграть с Linux, возможно, стоит взглянуть.
Если вы собираетесь опубликовать сценарий для меня, пожалуйста, убедитесь, что он хорошо прокомментирован, чтобы помочь мне учиться.