niceos:script_launcher_bh
Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
| niceos:script_launcher_bh [2025/03/29 23:31] – [Описание] | niceos:script_launcher_bh [2025/04/13 00:36] (текущий) – [Описание] | ||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| ===== Script Launcher ===== | ===== Script Launcher ===== | ||
| - | **Linux** | + | **Linux**\\ |
| - | Скрипты далее | + | // |
| + | |||
| + | {{: | ||
| + | |||
| + | Скрипт перебирает все скрипты '' | ||
| и отбирают те в которых есть ''# | и отбирают те в которых есть ''# | ||
| Строка 17: | Строка 21: | ||
| </ | </ | ||
| + | |||
| + | строка для основного описания будет отображена следом за названием скрипта // | ||
| признаком окончания описания является первая первая найденная строка где кроме ''#'' | признаком окончания описания является первая первая найденная строка где кроме ''#'' | ||
| Строка 73: | Строка 79: | ||
| <code bash launcher.sh> | <code bash launcher.sh> | ||
| #!/bin/bash | #!/bin/bash | ||
| - | |||
| - | # Устанавливаем локаль, | ||
| export LANG=en_US.UTF-8 | export LANG=en_US.UTF-8 | ||
| export LC_ALL=en_US.UTF-8 | export LC_ALL=en_US.UTF-8 | ||
| - | #!/bin/bash | ||
| # === 🚀Лаунчер === | # === 🚀Лаунчер === | ||
| - | # * ищет в основном каталоге и подкаталогах | + | # ищет в основном каталоге и подкаталогах |
| - | # * файлы *.sh с ==AUTOEXEC== в шапке и создает список из таких файлов | + | # файлы *.sh с ==AUTOEXEC== в шапке и создает список из таких файлов |
| - | # * с возможностью запуска | + | # с возможностью запуска |
| - | + | # поддерживает режимы: | |
| - | export LANG=en_US.UTF-8 | + | # можно задавать глубину вложенности и абсолютные/ |
| - | export LC_ALL=en_US.UTF-8 | + | |
| INCLUDE_MARKER="# | INCLUDE_MARKER="# | ||
| Строка 90: | Строка 92: | ||
| TMP_LIST="/ | TMP_LIST="/ | ||
| SELECTED_FILE="" | SELECTED_FILE="" | ||
| + | |||
| + | # Каталоги, | ||
| + | EXCLUDE_DIRS=(" | ||
| + | |||
| + | # Каталоги, | ||
| + | INCLUDE_DIRS=(" | ||
| + | |||
| + | # Глубина вложенности (0 = без ограничений) | ||
| + | MIN_DEPTH=0 | ||
| + | MAX_DEPTH=0 | ||
| + | |||
| + | # Режим поиска: | ||
| + | # | ||
| + | SEARCH_MODE=" | ||
| # --- Проверка fzf --- | # --- Проверка fzf --- | ||
| Строка 100: | Строка 116: | ||
| > " | > " | ||
| SEPARATOR=" | SEPARATOR=" | ||
| - | find " | + | |
| + | FIND_CONDITION="" | ||
| + | [[ " | ||
| + | [[ " | ||
| + | |||
| + | if [[ " | ||
| + | for DIR in " | ||
| + | [ -d " | ||
| + | | ||
| + | done | ||
| + | else | ||
| + | EXCLUDE_EXPR="" | ||
| + | for DIR in " | ||
| + | ABS_DIR=$(realpath " | ||
| + | EXCLUDE_EXPR+=" | ||
| + | done | ||
| + | EXCLUDE_EXPR=" | ||
| + | eval "find \" | ||
| + | fi | sort | while read -r FILE; do | ||
| if grep -q " | if grep -q " | ||
| TITLE="" | TITLE="" | ||
| SHORT="" | SHORT="" | ||
| + | found_title=false | ||
| while IFS= read -r line; do | while IFS= read -r line; do | ||
| [[ -z " | [[ -z " | ||
| Строка 109: | Строка 144: | ||
| CLEANED=" | CLEANED=" | ||
| if [[ " | if [[ " | ||
| - | TITLE=" | + | TITLE=" |
| found_title=true | found_title=true | ||
| elif [[ " | elif [[ " | ||
| Строка 130: | Строка 165: | ||
| # --- Предпросмотр --- | # --- Предпросмотр --- | ||
| - | PREVIEW_CMD=$(cat << | + | PREVIEW_CMD=$(cat <<'EOF' |
| - | FILE=\$(echo {} | awk -F "$SEPARATOR" ' | + | FILE=$(echo {} | awk -F " |
| - | if [ -f "\$FILE" ]; then | + | if [ -f " |
| - | ENCODING=\$(file -bi "\$FILE" | cut -d= -f2) | + | ENCODING=$(file -bi " |
| - | if [ "\$ENCODING" | + | if [ " |
| - | echo " | + | echo " |
| echo " | echo " | ||
| echo "" | echo "" | ||
| fi | fi | ||
| - | BASENAME=\$(basename "\$FILE" | + | BASENAME=$(basename " |
| - | TITLE_LINE=\$(awk '/^# ==AUTOEXEC==/ | + | TITLE_LINE=$(awk '/^# ==AUTOEXEC==/ |
| - | echo -e " | + | echo -e "📄 $BASENAME\n📂 $FILE\n\n📛 $TITLE_LINE\n" |
| - | awk '/^# ==AUTOEXEC==/ | + | awk '/^# ==AUTOEXEC==/ |
| else | else | ||
| - | echo "❌ Файл не найден: | + | echo "❌ Файл не найден: |
| fi | fi | ||
| EOF | EOF | ||
| Строка 152: | Строка 187: | ||
| while true; do | while true; do | ||
| echo "📦 Выберите режим запуска:" | echo "📦 Выберите режим запуска:" | ||
| - | echo " 1) fzf-интерфейс $([ " | + | echo " 1 - 🚀fzf-интерфейс $([ " |
| - | echo " 2) Классическое текстовое меню" | + | echo " 2 - 📄Классическое текстовое меню" |
| - | echo " 0) Выход" | + | echo " 0 - ❌Выход" |
| echo -n ">> | echo -n ">> | ||
| read -r launcher_mode | read -r launcher_mode | ||
| Строка 183: | Строка 218: | ||
| echo " 0) ❌ Выход" | echo " 0) ❌ Выход" | ||
| echo | echo | ||
| - | mapfile -t ENTRIES < <(cut -d" | + | mapfile -t ENTRIES < <(awk -F " |
| ENTRIES+=(" | ENTRIES+=(" | ||
| Строка 224: | Строка 259: | ||
| rm -f " | rm -f " | ||
| + | |||
| </ | </ | ||
| ===== Описание ===== | ===== Описание ===== | ||
| - | ++++script_launcher| | + | ++++script_launcher.md| |
| <code md script_launcher.md> | <code md script_launcher.md> | ||
| - | # Script Launcher | + | # 🚀 Лаунчер скриптов (версия V4) |
| - | Утилита для запуска локальных скриптов с использованием системы тегов и интерфейса выбора. Поддерживает интерактивный выбор через `fzf` (если установлен) или текстовое меню. Разрабатывается для работы в рамках одного каталога, | + | **Дата создания:** 2025-04-05 |
| - | --- | + | ## 📄 Описание |
| - | ## 📦 Возможности | + | Этот Bash-скрипт выполняет поиск и запуск `.sh`-файлов, содержащих маркер `# ==AUTOEXEC==` в шапке. Он поддерживает два режима поиска: |
| - | - Поиск | + | - `exclude` — поиск от корня, исключая |
| - | - Отбор скриптов только с маркером `# ==AUTOEXEC==` | + | - `include` — поиск только в явно указанных |
| - | - Чтение заголовка (вида `# === Название ===`) и краткого описания (`# * краткое описание`) | + | |
| - | - Поддержка интерфейса выбора через | + | |
| - | - Альтернатива — классическое текстовое меню Bash | + | |
| - | - Подтверждение перед запуском | + | |
| - | - Поддержка временных | + | |
| - | --- | + | ## ⚙️ Переменные настройки |
| - | ## 🔧 Требования | + | | Переменная |
| + | |----------------|--------------------------------------------------------------------------------| | ||
| + | | `MODE` | ||
| + | | `ROOT_DIR` | ||
| + | | `INCLUDE_DIRS` | Каталоги для поиска в режиме `include` (можно задать относительные/ | ||
| + | | `EXCLUDE_DIRS` | Каталоги, | ||
| + | | `MIN_DEPTH` | ||
| + | | `MAX_DEPTH` | ||
| + | | `SEPARATOR` | ||
| + | | `TMP_LIST` | ||
| - | - Bash 4+ | + | ## 🧩 Логика |
| - | - [fzf](https:// | + | |
| - | Установка | + | 1. Выполняется поиск `.sh`-файлов с учётом глубины и включений/ |
| - | ```bash | + | 2. Извлекаются заголовок (`# === Название ===`) и краткое описание. |
| - | sudo apt update && sudo apt install | + | 3. Создаётся список скриптов, |
| - | ``` | + | - `fzf` (при наличии), |
| + | | ||
| + | 4. Запуск выбранного скрипта с подтверждением. | ||
| - | --- | + | ## 🔍 Пример использования |
| - | + | ||
| - | ## 🧠 Структура | + | |
| - | + | ||
| - | Скрипты должны содержать | + | |
| + | Просто запустить: | ||
| ```bash | ```bash | ||
| - | # ==AUTOEXEC== | + | ./ |
| - | # === Название скрипта === | + | |
| - | # * Краткое описание или цель | + | |
| ``` | ``` | ||
| - | Пример: | + | ## 🗂 Пример |
| - | ```bash | + | |
| - | # ==AUTOEXEC== | + | |
| - | # === Сохранить резервную копию === | + | |
| - | # * Создаёт .tar.gz архив с логированием | + | |
| - | ``` | + | |
| - | --- | ||
| - | |||
| - | ## 🚀 Запуск | ||
| - | |||
| - | Сначала выполните `launcher.sh` из нужного каталога: | ||
| - | ```bash | ||
| - | bash launcher.sh | ||
| ``` | ``` | ||
| - | - У меня настроен алиас на высов скрипта ' | + | project/ |
| + | ├── launcher.sh | ||
| + | ├── scripts/ | ||
| + | │ | ||
| + | │ | ||
| + | ├── scripts_arch/ | ||
| + | │ | ||
| + | ``` | ||
| + | ## 🛡️ Советы | ||
| - | Выберите | + | - Убедитесь, что скрипты имеют маркер `# ==AUTOEXEC==` |
| - | 1. fzf-интерфейс (если доступен) | + | - Скрипт работает стабильно |
| - | 2. Классическое | + | - Для предпросмотра `fzf` необходим пакет `fzf`. |
| - | 0. Выход | + | |
| - | + | ||
| - | Выбранный скрипт запускается **только после подтверждения**. | + | |
| - | + | ||
| - | --- | + | |
| - | + | ||
| - | ## 🔐 Безопасность и устойчивость | + | |
| - | + | ||
| - | - Временные файлы создаются через `mktemp`, исключая конфликты при параллельном запуске | + | |
| - | - Удаляются автоматически через `trap EXIT` | + | |
| - | - Нет выполнения кода без согласия пользователя | + | |
| - | - Нет внешних сетевых обращений | + | |
| - | + | ||
| - | --- | + | |
| - | + | ||
| - | ## 📁 Планы на будущее | + | |
| - | + | ||
| - | - Опциональная поддержка `.py`-файлов | + | |
| - | - Флаги запуска (`--py`, `--no-preview` и т.п.) | + | |
| - | - Категории или теги | + | |
| - | - Логирование запусков | + | |
| - | + | ||
| - | --- | + | |
| - | + | ||
| - | Дата обновления: | + | |
| </ | </ | ||
| ++++ | ++++ | ||
| - | |||
| ---- | ---- | ||
| - | **Одобрить материально** | + | {{page> |
| - | [[https:// | + | |
niceos/script_launcher_bh.1743280285.txt.gz · Последнее изменение: —
