This commit is contained in:
parent
cf969a764d
commit
02c103e196
44
Readme.md
44
Readme.md
|
|
@ -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. **Запустите**:
|
||||||
|
|
|
||||||
10
main.go
10
main.go
|
|
@ -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 { // Итерируемся по элементам
|
||||||
|
|
|
||||||
|
|
@ -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'
|
||||||
Loading…
Reference in New Issue