>Хочу рассказать об идее утилиты командной строки. Автор, если нефига делать, напиши утилитку, а то мне впадлу
sysctl в зависимости от текущего ядра, и иерархическое распарсивание, а то достало ужо...
То есть, новый sysctl должен понимать как старый sysctl.conf, так и новый, с тегами.
@UNIQ 2 {
# тут все параметры для ядер от 2.0.0 до 2.*
@UNIQ 2.4
{
# тут только для 2.4.+
}
@UNIQ 2.6
{
# тут только для 2.6.+
@UNIQ 2.6.6-16
{
# тут только для 2.6.6.* до 2.6.16.*
@UNIQ 2.6.16.25-61
{
# тут только для 2.6.16.25 до 2.6.16.61
}
}
@UNIQ 2.6.16,18,26
{
# тут только для 2.6.16.*, 2.6.18.* и 2.6.26.*
}
@UNIQ 2.6.32-34,36
{
# тут только для 2.6.32.*, 2.6.33.*, 2.6.34.* и 2.6.36.*
}
}
}
1. Тэги начинающиеся с @UNIQ N { всегда должны обрабатываться как уникальные, т.е.
@UNIQ 2.0 {
# все ядра 2.0.*
@UNIQ1.3.21-vasyapup1.9.98 {
# и вдруг захотелось 1.3.21-vasyapup1.9.98
}
# а тут продолжили оптять для 2.0.*
}
2. Теэги начинающееся с "@GROUP N {" и "@SUBGROUP N {" - есть групповые. Т.е.
@GROUP 2 {
# все ядра 2.*
@SUBGROUP 2 {
# все ядра 2.2.*
@SUBGROUP 6 {
# все ядра 2.2.6.*
}
}
@SUBGROUP 6 {
# все ядра 2.6.*
@SUBGROUP 16-32 {
# все ядра 2.6.16.* до 2.6.32.*
}
}
}
3. Тэги начинающиеся с @VERSION, @PATCHLEVEL, @SUBLEVEL, @EXTRAVERSION - абсолютные.
Т.е. возможны варианты
@UNIQ 2.0.15 {
# только 2.0.*
@SUBLEVEL 22 {
# только ядра 2.0.22.*
}
@PATCHLEVEL 4 {
# только ядра 2.4.15.*
@PATCHLEVEL 6 {
# только ядра 2.6.15.*
}
}
@SUBGROUP 0 {
# опять 2.0.*
@SUBGROUP 6 {
# все ядра 2.2.6.*
}
}
}
} # 1.3
Приоритеты:
Самый высший - @UNIQ
Далее - @VERSION, @PATCHLEVEL, @SUBLEVEL, @EXTRAVERSION, которые просто заменяют число в соответствующей позиции.
низший приоритеты - @GRUOP и @SUBGROUP - которые дописывают в конец нумерации своё значение.
отдельно можно создать секцию @COMMON { } - для всех, без исключения, но с отрицаниями.
@COMMON {
от 0 до ....
!@VERSION 1 {
# кроме 1.*
}
!@VERSION 2 {
кроме 2.*
!@SUBGROUP 1,3 {
# кроме 2.1.* и 2.3.*
!@SUBLEVEL 5 {
# и 2.5.*
}
}
}
}
ну и так далее :)