niceos:script_launcher_bh
Различия
Показаны различия между двумя версиями страницы.
| Предыдущая версия справа и слеваПредыдущая версияСледующая версия | Предыдущая версия | ||
| niceos:script_launcher_bh [2025/03/29 23:48] – | niceos:script_launcher_bh [2025/04/13 00:36] (текущий) – [Описание] | ||
|---|---|---|---|
| Строка 1: | Строка 1: | ||
| ===== Script Launcher ===== | ===== Script Launcher ===== | ||
| **Linux**\\ | **Linux**\\ | ||
| + | |||
| + | // | ||
| {{: | {{: | ||
| - | Скрипты далее | + | Скрипт перебирает все скрипты '' |
| и отбирают те в которых есть ''# | и отбирают те в которых есть ''# | ||
| Строка 19: | Строка 21: | ||
| </ | </ | ||
| + | |||
| + | строка для основного описания будет отображена следом за названием скрипта // | ||
| признаком окончания описания является первая первая найденная строка где кроме ''#'' | признаком окончания описания является первая первая найденная строка где кроме ''#'' | ||
| Строка 75: | Строка 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 | ||
| # === 🚀Лаунчер === | # === 🚀Лаунчер === | ||
| - | # * ищет в основном каталоге и подкаталогах | + | # ищет в основном каталоге и подкаталогах |
| - | # * файлы *.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.sh — Умный лаунчер | + | # 🚀 Лаунчер скриптов |
| - | ## 📌 Описание | + | **Дата создания:** 2025-04-05 |
| - | Лаунчер ищет во всех подкаталогах текущего каталога скрипты `.sh`, | + | |
| - | Он поддерживает два режима запуска: | + | ## 📄 Описание |
| - | - Через **fzf** (если установлен); | + | |
| - | - Через **текстовое меню**, если `fzf` недоступен. | + | |
| - | Для каждого скрипта показывается краткое описание и путь, доступен предпросмотр заголовков | + | Этот Bash-скрипт |
| - | --- | + | - `exclude` — поиск от корня, исключая определённые каталоги. |
| + | - `include` — поиск только в явно указанных каталогах. | ||
| - | ## 🔧 Поддерживаемые | + | ## ⚙️ |
| - | - `.sh` — Bash | + | |
| - | --- | + | | Переменная |
| + | |----------------|--------------------------------------------------------------------------------| | ||
| + | | `MODE` | ||
| + | | `ROOT_DIR` | ||
| + | | `INCLUDE_DIRS` | Каталоги для поиска в режиме `include` (можно задать относительные/ | ||
| + | | `EXCLUDE_DIRS` | Каталоги, | ||
| + | | `MIN_DEPTH` | ||
| + | | `MAX_DEPTH` | ||
| + | | `SEPARATOR` | ||
| + | | `TMP_LIST` | ||
| - | ## 📁 Формат шапки в скрипте: | + | ## 🧩 Логика |
| - | \`\`\`bash | + | |
| - | # ==AUTOEXEC== | + | |
| - | # === Название === | + | |
| - | # Краткое описание | + | |
| - | # * Подробности (опционально) | + | |
| - | \`\`\` | + | |
| - | --- | + | 1. Выполняется поиск `.sh`-файлов с учётом глубины и включений/ |
| + | 2. Извлекаются заголовок (`# === Название ===`) и краткое описание. | ||
| + | 3. Создаётся список скриптов, | ||
| + | - `fzf` (при наличии), | ||
| + | - или классическое Bash-меню. | ||
| + | 4. Запуск выбранного скрипта с подтверждением. | ||
| - | ## 📌 Использование | + | ## 🔍 Пример использования |
| - | \`\`\`bash | + | |
| - | bash script_launcher.sh | + | |
| - | \`\`\` | + | |
| - | --- | + | Просто запустить: |
| + | ```bash | ||
| + | ./ | ||
| + | ``` | ||
| - | ## 💬 Зависимости | + | ## 🗂 Пример структуры |
| - | - `bash` | + | |
| - | - `grep`, `awk`, `tail` | + | |
| - | - `fzf` (опционально для расширенного интерфейса) | + | |
| - | --- | + | ``` |
| + | project/ | ||
| + | ├── launcher.sh | ||
| + | ├── scripts/ | ||
| + | │ | ||
| + | │ | ||
| + | ├── scripts_arch/ | ||
| + | │ | ||
| + | ``` | ||
| + | |||
| + | ## 🛡️ Советы | ||
| + | |||
| + | - Убедитесь, | ||
| + | - Скрипт работает стабильно с абсолютными и относительными путями. | ||
| + | - Для предпросмотра `fzf` необходим пакет `fzf`. | ||
| - | ## 💡 Особенности: | ||
| - | - Автоматический предпросмотр содержимого | ||
| - | - Проверка кодировки файлов (с предупреждением) | ||
| - | - Эмоджи и визуальное оформление | ||
| - | - Автоудаление временного файла | ||
| - | - Поддержка Bash-скриптов | ||
| </ | </ | ||
| ++++ | ++++ | ||
| - | |||
| ---- | ---- | ||
| - | **Одобрить материально** | + | {{page> |
| - | [[https:// | + | |
niceos/script_launcher_bh.1743281293.txt.gz · Последнее изменение: —
