This commit is contained in:
Ваше Имя 2026-03-24 22:09:16 +05:00
parent cf969a764d
commit 02c103e196
5 changed files with 44 additions and 31 deletions

View File

@ -26,26 +26,17 @@ go build -o hello main.go
```bash ```bash
# Вариант A: В домашнюю папку (рекомендуется) # Вариант A: В домашнюю папку (рекомендуется)
cp hello ~/hello cp hello ~/hello
# Использовать: ~/hello
# Вариант B: В текущую рабочую папку # Вариант B: В текущую рабочую папку
cp hello /ваша/рабочая/папка/ cp hello /ваша/рабочая/папка/
# Использовать: ./hello
# Вариант C: В системный PATH (если нужно глобально) # Вариант C: В системный PATH (если нужно глобально)
sudo cp hello /usr/local/bin/ sudo cp hello /usr/local/bin/
# Использовать: hello
``` ```
3. **Создайте структуру конфигов** (если нужно): 3. **Создайте структуру конфигов** (если нужно):
```bash ```bash
# В домашней директории
mkdir -p ~/.hello/menu
cp menu.yml ~/.hello/menu/
cp env.ini ~/.hello/
# Или в рабочей директории
mkdir -p menu mkdir -p menu
# положите туда ваши menu.yml и env.ini # положите туда ваши menu.yml и env.ini
``` ```
@ -55,33 +46,38 @@ mkdir -p menu
### Интерактивный режим ### Интерактивный режим
```bash ```bash
# Если бинарник в PATH # Запуск с конфигом по умолчанию (ищет menu/menu.yml)
hello
# Если бинарник в текущей папке
./hello ./hello
# Если бинарник в домашней директории # Запуск с указанием пути к конфигу через флаг -c
~/hello ./hello -c /путь/к/моемуеню.yml
./hello -c ./another_menu.yml
``` ```
### Прямой запуск команд ### Прямой запуск команд
```bash ```bash
# Выполнить пункт 1 из меню # Выполнить пункт 1 (используя конфиг по умолчанию)
hello --exec "1" ./hello --exec "1"
# Выполнить цепочку 1 → 2 → 3 # Выполнить цепочку 1 → 2 → 3 с указанием конкретного конфига
hello --exec "1-2-3" ./hello -c ./deploy_menu.yml --exec "1-2-3"
``` ```
## Флаги командной строки
| Флаг | По умолчанию | Описание |
| :--- | :--- | :--- |
| `-c` | `menu/menu.yml` | **Путь к файлу конфигурации меню.** Позволяет указать произвольный путь к `.yml` файлу. Если не указан, ищет файл в папке `menu`. |
| `--exec` | `""` | **Режим прямого выполнения.** Позволяет выполнить пункты меню без входа в интерактивный режим. Аргумент — строка с номерами пунктов, разделенными дефисом (например, `"1-2-3"`). |
## Структура проекта ## Структура проекта
``` ```
. .
├── hello # бинарник (после сборки) ├── hello # бинарник (после сборки)
├── main.go # исходный код ├── main.go # исходный код
├── menu/ # папка с меню (опционально) ├── menu/ # папка с меню (стандартный путь)
│ └── menu.yml # главное меню │ └── menu.yml # главное меню
├── env.ini # переменные (опционально) ├── env.ini # переменные (опционально)
└── README.md └── README.md
@ -90,7 +86,7 @@ hello --exec "1-2-3"
## Быстрый старт ## Быстрый старт
1. **Соберите бинарник** 1. **Соберите бинарник**
2. **Создайте базовый `menu.yml`**: 2. **Создайте базовый `menu/menu.yml`**:
```yaml ```yaml
items: items:
@ -102,12 +98,6 @@ items:
title: "2. Проверка диска" title: "2. Проверка диска"
commands: commands:
- "df -h" - "df -h"
3:
title: "3. Git статус"
commands:
- "git status"
catch:
- "echo 'Не git репозиторий'"
``` ```
3. **Запустите**: 3. **Запустите**:

2
env.ini Normal file
View File

@ -0,0 +1,2 @@
[dev]
appName = qq

BIN
hello

Binary file not shown.

10
main.go
View File

@ -339,13 +339,15 @@ func (m *Menu) catch(item MenuItem, vars map[string]string) {
} }
func main() { func main() {
// Инициализация главного меню // Инициализация флагов
menu := NewMenu("menu.yml") // Файл главного меню (menu/menu.yml) configFile := flag.String("c", "menu.yml", "Путь к файлу конфигурации меню")
// Создаем флаг -e/--exec с необязательным аргументом
execFlag := flag.String("exec", "", "Execution parameter") execFlag := flag.String("exec", "", "Execution parameter")
flag.Parse() // Парсим аргументы flag.Parse() // Парсим аргументы
// Инициализация главного меню с использованием флага -c
// По умолчанию "menu.yml", что с учетом resolvePath превратится в "menu/menu.yml"
menu := NewMenu(*configFile)
if *execFlag != "" { // Проверяем, задан ли флаг --exec if *execFlag != "" { // Проверяем, задан ли флаг --exec
items := strings.Split(*execFlag, "-") // Разделяем строку по "-" items := strings.Split(*execFlag, "-") // Разделяем строку по "-"
for _, item := range items { // Итерируемся по элементам for _, item := range items { // Итерируемся по элементам

19
menu/menu2.yml Executable file
View File

@ -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'