diff --git a/Readme.md b/Readme.md index abe2da2..abee654 100644 --- a/Readme.md +++ b/Readme.md @@ -26,26 +26,17 @@ go build -o hello main.go ```bash # Вариант A: В домашнюю папку (рекомендуется) cp hello ~/hello -# Использовать: ~/hello # Вариант B: В текущую рабочую папку cp hello /ваша/рабочая/папка/ -# Использовать: ./hello # Вариант C: В системный PATH (если нужно глобально) sudo cp hello /usr/local/bin/ -# Использовать: hello ``` 3. **Создайте структуру конфигов** (если нужно): ```bash -# В домашней директории -mkdir -p ~/.hello/menu -cp menu.yml ~/.hello/menu/ -cp env.ini ~/.hello/ - -# Или в рабочей директории mkdir -p menu # положите туда ваши menu.yml и env.ini ``` @@ -55,33 +46,38 @@ mkdir -p menu ### Интерактивный режим ```bash -# Если бинарник в PATH -hello - -# Если бинарник в текущей папке +# Запуск с конфигом по умолчанию (ищет menu/menu.yml) ./hello -# Если бинарник в домашней директории -~/hello +# Запуск с указанием пути к конфигу через флаг -c +./hello -c /путь/к/моему_меню.yml +./hello -c ./another_menu.yml ``` ### Прямой запуск команд ```bash -# Выполнить пункт 1 из меню -hello --exec "1" +# Выполнить пункт 1 (используя конфиг по умолчанию) +./hello --exec "1" -# Выполнить цепочку 1 → 2 → 3 -hello --exec "1-2-3" +# Выполнить цепочку 1 → 2 → 3 с указанием конкретного конфига +./hello -c ./deploy_menu.yml --exec "1-2-3" ``` +## Флаги командной строки + +| Флаг | По умолчанию | Описание | +| :--- | :--- | :--- | +| `-c` | `menu/menu.yml` | **Путь к файлу конфигурации меню.** Позволяет указать произвольный путь к `.yml` файлу. Если не указан, ищет файл в папке `menu`. | +| `--exec` | `""` | **Режим прямого выполнения.** Позволяет выполнить пункты меню без входа в интерактивный режим. Аргумент — строка с номерами пунктов, разделенными дефисом (например, `"1-2-3"`). | + ## Структура проекта ``` . ├── hello # бинарник (после сборки) ├── main.go # исходный код -├── menu/ # папка с меню (опционально) +├── menu/ # папка с меню (стандартный путь) │ └── menu.yml # главное меню ├── env.ini # переменные (опционально) └── README.md @@ -90,7 +86,7 @@ hello --exec "1-2-3" ## Быстрый старт 1. **Соберите бинарник** -2. **Создайте базовый `menu.yml`**: +2. **Создайте базовый `menu/menu.yml`**: ```yaml items: @@ -102,12 +98,6 @@ items: title: "2. Проверка диска" commands: - "df -h" - 3: - title: "3. Git статус" - commands: - - "git status" - catch: - - "echo 'Не git репозиторий'" ``` 3. **Запустите**: diff --git a/env.ini b/env.ini new file mode 100644 index 0000000..975804d --- /dev/null +++ b/env.ini @@ -0,0 +1,2 @@ +[dev] +appName = qq diff --git a/hello b/hello index 8f6c33d..e157515 100755 Binary files a/hello and b/hello differ diff --git a/main.go b/main.go index 214b0f7..df1f938 100644 --- a/main.go +++ b/main.go @@ -339,13 +339,15 @@ func (m *Menu) catch(item MenuItem, vars map[string]string) { } func main() { - // Инициализация главного меню - menu := NewMenu("menu.yml") // Файл главного меню (menu/menu.yml) - - // Создаем флаг -e/--exec с необязательным аргументом + // Инициализация флагов + configFile := flag.String("c", "menu.yml", "Путь к файлу конфигурации меню") execFlag := flag.String("exec", "", "Execution parameter") flag.Parse() // Парсим аргументы + // Инициализация главного меню с использованием флага -c + // По умолчанию "menu.yml", что с учетом resolvePath превратится в "menu/menu.yml" + menu := NewMenu(*configFile) + if *execFlag != "" { // Проверяем, задан ли флаг --exec items := strings.Split(*execFlag, "-") // Разделяем строку по "-" for _, item := range items { // Итерируемся по элементам diff --git a/menu/menu2.yml b/menu/menu2.yml new file mode 100755 index 0000000..ee57cbe --- /dev/null +++ b/menu/menu2.yml @@ -0,0 +1,19 @@ +hint: | + + /======================================\ + | ************************************ | + | * МЕНЮ УПРАВЛЕНИЯ СИСТЕМОЙ 2 * | + | * ver. 1.0.0 (2024) * | + | ************************************ | + \======================================/ + +items: + 1: + title: '1. Develop' + file: '/develop/menu.yml' + 2: + title: '2. Test' + file: '/test/menu.yml' + 3: + title: '3. Production' + file: '/prod/menu.yml' \ No newline at end of file