Автор Гілка: bash-modules 1.0.7  (Прочитано 3920 раз)

Відсутній Володимир Лісівка

  • Адміністратор ЩОДО
  • Видавець
  • *****
  • дописів: 3822
  • Карма: +11/-0
  • Програміст
bash-modules 1.0.7
« : 2011-03-28 02:10:33 »
bash-modules — це проста система модулів для bash. Вже наявні модулі для виводу повідомлень, розбирання параметрів командного рядка та автоматичного тестування. Додати новий модуль дуже просто. Використати його — ще простіше.

Зміни:
  • підсвітчування кольором рівня повідомлення при виводі на термінал в модулі log;
  • модуль unit для підтримки автоматичного тестування;
  • в модулі arguments: підтримка значень для параметрів через =: --foo=value, та підтримка нового типу ключів: інкрементальний;
  • приклади та тести.

Домашня сторінка: http://trac.assembla.com/bash-modules/



"Вітаю, світе!" на bash з bash-modules:


#!/bin/bash
. import.sh log arguments

NAME="world"

parse_arguments "-n|--name)NAME;S" -- "$@" || {
  error "Cannot parse command line."
  exit 1
}

info "Hello, $NAME!"
« Змінено: 2011-03-28 21:14:52 від Re. »
[Fedora Linux]

White Trash

  • Гість
Re: bash-modules 1.0.7
« Відповідей #1 : 2011-03-28 20:50:54 »
Чудова робота, дякую.

Пропозиція. Додати INI-parser (обговорення - http://ajdiaz.wordpress.com/2008/02/09/bash-ini-parser/). Там кілька версій, користуюсь підправленою ранньою версією:
cfg.parser () {
    local IFS=$'\n' && local ini=( $(<$1) )  # convert to line-array
    ini=( ${ini[*]//;*/} )                   # remove comments ‘;’
    ini=( ${ini[*]//\#*/} )                  # remove comments ‘#’
    ini=( ${ini[*]/\ =\ /=} )                # remove anything with a space around ‘ = ‘
    ini=( ${ini[*]/#[/\}$'\n'cfg.section.} ) # set section prefix
    ini=( ${ini[*]/%]/ \(} )                 # convert text2function (1)
    ini=( ${ini[*]/=/=\( } )                 # convert item to array
    ini=( ${ini[*]/%/ \)} )                  # close array parenthesis
    ini=( ${ini[*]/%\( \)/\(\) \{} )         # convert text2function (2)
    ini=( ${ini[*]/%\} \)/\}} )              # remove extra parenthesis
    ini=( ${ini[*]/#\ */} )                  # remove blank lines
    ini=( ${ini[*]/#\ */} )                  # remove blank lines with tabs
    ini[0]=''                                # remove first element
    ini[${#ini[*]} + 1]='}'                  # add the last brace
    eval "$(echo "${ini[*]}")"               # eval the result
}

Там дуже пристойно останній варіант виглядає, але його не тестував.

Відсутній dector

  • Графоман
  • ****
  • дописів: 269
  • Карма: +0/-0
  • Deb'user
Re: bash-modules 1.0.7
« Відповідей #2 : 2011-03-29 13:00:56 »
Debian Wheezy + Asus Eee PC 901 + Awesome 3

Відсутній Володимир Лісівка

  • Адміністратор ЩОДО
  • Видавець
  • *****
  • дописів: 3822
  • Карма: +11/-0
  • Програміст
Re: bash-modules 1.0.7
« Відповідей #3 : 2011-03-31 01:07:58 »
Я, нажаль, не можу додати парсер .ini файлів прямо зараз. Страшна правда життя в тому, що якщо мати десять різних власних проектів, то кожному окремому проекту можна приділяти в середньому 10% свого вільного часу. Якщо займатися ними на вихідних, то повернення до проекту проходить десь через два місяці. Воно в мене приблизно так і виходить. :-(

Просто зараз я не маю часу. Можливо зроблю, коли звільнюся з роботи.
[Fedora Linux]

Відсутній Володимир Лісівка

  • Адміністратор ЩОДО
  • Видавець
  • *****
  • дописів: 3822
  • Карма: +11/-0
  • Програміст
Re: bash-modules 1.0.7
« Відповідей #4 : 2011-04-26 19:48:18 »
Я створив парсер для файлів ini:

http://trac.assembla.com/bash-modules/browser/bash-modules/trunk/bash-modules/src/bash-modules/ini_parser.sh

Тут тести:

http://trac.assembla.com/bash-modules/browser/bash-modules/trunk/bash-modules/test/test_ini_parser.sh

Принцип роботи: з іні-файлу генерується функція, яка вміє  повертати список секцій, спиисок ключів у секції і значення ключів.

Повтори у ключах і секціях не підтримуються — буде використане тільки перше значення.
[Fedora Linux]