Инструменты пользователя

Инструменты сайта


projects:projects

Различия

Показаны различия между двумя версиями страницы.

Ссылка на это сравнение

Следующая версия
Предыдущая версия
projects:projects [2025/03/22 19:12] – создано - внешнее изменение 127.0.0.1projects:projects [2025/03/23 20:46] (текущий)
Строка 1: Строка 1:
-===== Проекты =====+====== Проекты ====== 
 +===== Донастройки =====
 Linux Linux
- 
-Скрипты далее перебирают все скрипты ''*.sh'' в каталоге запуска и подкаталогах, если имеет доступ 
-и отбирают те в которых есть ''# ==AUTOEXEC=='' 
- 
-<code bash> 
-#!/bin/bash 
-# ==AUTOEXEC== 
-# === Название программы === 
-# * Строка для основного описания 
-# * Строки для развернутого описания 
-# * Строки для развернутого описания 
-# 
-</code> 
- 
-признаком окончания описания является первая строка в которой после ''#'' пустая строка 
-==== Лаунчер скриптов (средствами bash) ==== 
- 
-++++ Скрипт для поиска и запуска скрптов из подкаталогов при помощи утилиты bash (нажмите чтобы раскрыть)| 
-<file bash launcher.sh> 
-#!/bin/bash 
-export LANG=en_US.UTF-8 
-export LC_ALL=en_US.UTF-8 
- 
-# --- Конфигурация --- 
-INCLUDE_MARKER="# ==AUTOEXEC==" 
-ROOT_DIR="$(pwd)" 
-TMP_LIST="/tmp/script_list.txt" 
- 
-# --- Поиск подходящих скриптов --- 
-> "$TMP_LIST" 
-find "$ROOT_DIR" -type f -name "*.sh" | while read -r FILE; do 
-  if grep -q "^$INCLUDE_MARKER" "$FILE"; then 
-    TITLE_TEXT="" 
-    SHORT_TEXT="" 
-    while IFS= read -r line; do 
-      [[ -z "$line" ]] && break 
-      if [[ "$line" =~ ^# ]]; then 
-        CLEANED_LINE="${line#\# }" 
-        if [[ "$CLEANED_LINE" =~ ^===.*=== ]]; then 
-          TITLE_TEXT="$CLEANED_LINE" 
-        elif [[ "$CLEANED_LINE" =~ ^\* ]]; then 
-          SHORT_TEXT="${CLEANED_LINE#\* }" 
-          break 
-        fi 
-      fi 
-    done < <(tail -n +2 <(grep -A30 "^$INCLUDE_MARKER" "$FILE")) 
-    if [ -n "$TITLE_TEXT" ] && [ -n "$SHORT_TEXT" ]; then 
-      SHORT_DESC="\e[35m$TITLE_TEXT\e[0m * $SHORT_TEXT" 
-    else 
-      SHORT_DESC="$SHORT_TEXT" 
-    fi 
-    echo -e "$FILE|$SHORT_DESC" >> "$TMP_LIST" 
-  fi 
-done 
- 
-if [ ! -s "$TMP_LIST" ]; then 
-  echo "❌ Подходящих скриптов не найдено. Убедитесь, что в них есть строка '$INCLUDE_MARKER' в начале." 
-  exit 1 
-fi 
- 
-# --- Отображение меню --- 
-PS3="📌 Выберите скрипт: " 
-echo "📜 Найденные скрипты:" 
-echo " 0) ❌ Выход" 
-echo 
-mapfile -t ENTRIES < <(cut -d'|' -f2 "$TMP_LIST") 
-ENTRIES+=("❌ Выход") 
-select ENTRY in "${ENTRIES[@]}"; do 
-  if [[ "$REPLY" == "0" || "$ENTRY" == "❌ Выход" ]]; then 
-    echo "👋 До свидания!"; rm -f "$TMP_LIST"; exit 0 
-  fi 
-  [ -z "$ENTRY" ] && echo "❌ Неверный выбор" && continue 
-  SELECTED=$(grep -F "|$ENTRY" "$TMP_LIST" | head -n1 | cut -d'|' -f1) 
-  break 
-done 
- 
-# --- Показ подробного описания --- 
-echo 
-echo "📂 Скрипт: $SELECTED" 
-echo "🔍 Подробное описание:" 
-DESC=() 
-TITLE="" 
-while IFS= read -r line; do 
-  [[ -z "$line" ]] && break 
-  if [[ "$line" =~ ^# ]]; then 
-    CLEANED_LINE="${line#\# }" 
-    if [[ "$CLEANED_LINE" =~ ^== ]]; then 
-      TITLE="$CLEANED_LINE" 
-    else 
-      DESC+=("$CLEANED_LINE") 
-    fi 
-  else 
-    break 
-  fi 
-done < <(grep -A20 "^$INCLUDE_MARKER" "$SELECTED" | tail -n +2) 
- 
-if [ -n "$TITLE" ]; then 
-  echo -e "\e[35m$TITLE\e[0m"  # маджента 
-fi 
-for line in "${DESC[@]}"; do 
-  echo "$line" 
-done 
-echo 
- 
-# --- Выбор действия --- 
-PS3="   Выберите действие: " 
-echo " 0) ❌ Выход" 
-select ACTION in "⬅️ Назад" "🚀 Выполнить" "❌ Выход"; do 
-  if [[ "$REPLY" == "0" ]]; then 
-    echo "👋 До свидания!"; rm -f "$TMP_LIST"; exit 0 
-  fi 
-  case $REPLY in 
-    1) echo "↩️ Возврат в меню"; exec "$0";; 
-    2) 
-      echo "⚠️  Подтвердите запуск '$SELECTED' (y/N):" 
-      read confirm 
-      if [[ "$confirm" =~ ^[Yy]$ ]]; then 
-        echo "🚀 Запуск..." 
-        bash "$SELECTED" 
-      else 
-        echo "❎ Отмена." 
-      fi 
-      break;; 
-    3) echo "👋 До свидания!"; rm -f "$TMP_LIST"; exit 0;; 
-    *) echo "❌ Неверный выбор";; 
-  esac 
-done 
- 
-</file>++++ 
- 
-Более наглядный интерфейс через скрипт далее 
-требуется установка fzf (предложит установить при запуске если еще не установлен) 
-Если откажетесь при установке, то попробует запустить [[#лаунчер_скриптов_средствами_bash|Лаунчер скриптов (средствами bash)]] 
- 
-==== Лаунчер скриптов (fzf) ==== 
-++++Скрипт для поиска и запуска скрптов из подкаталогов при помощи утилиты fzf (нажмите чтобы раскрыть)| 
-<file bash launcher_fzf.sh> 
-#!/bin/bash 
-export LANG=en_US.UTF-8 
-export LC_ALL=en_US.UTF-8 
- 
-# Проверка наличия fzf 
-if ! command -v fzf &>/dev/null; then 
-  echo "📦 Утилита fzf не найдена. Установить её сейчас? (y/N):" 
-  read -r confirm 
-  if [[ "$confirm" =~ ^[Yy]$ ]]; then 
-    sudo apt update && sudo apt install -y fzf 
-  else 
-    echo "⚠️ fzf не установлен. Переход в классическое меню..." 
-    bash ./launcher.sh 
-    exit 0 
-  fi 
-fi 
- 
-# Конфигурация 
-INCLUDE_MARKER="# ==AUTOEXEC==" 
-ROOT_DIR="$(pwd)" 
-TMP_LIST="/tmp/fzf_script_list.txt" 
- 
-> "$TMP_LIST" 
- 
-# Сбор скриптов с заголовком и кратким описанием 
-find "$ROOT_DIR" -type f -name "*.sh" | while read -r FILE; do 
-  if grep -q "^$INCLUDE_MARKER" "$FILE"; then 
-    TITLE="" 
-    SHORT="" 
-    while IFS= read -r line; do 
-      [[ -z "$line" ]] && break 
-      if [[ "$line" =~ ^# ]]; then 
-        CLEANED="${line#\# }" 
-        if [[ "$CLEANED" =~ ^===.*=== ]]; then 
-          TITLE="$CLEANED" 
-        elif [[ "$CLEANED" =~ ^\* ]]; then 
-          SHORT="${CLEANED#\* }" 
-        fi 
-      fi 
-    done < <(tail -n +2 <(grep -A30 "^$INCLUDE_MARKER" "$FILE")) 
- 
-    DISPLAY_LINE="$(basename "$FILE") :: $TITLE * $SHORT" 
-    echo -e "$DISPLAY_LINE|$FILE" >> "$TMP_LIST" 
-  fi 
- 
-done 
- 
-if [ ! -s "$TMP_LIST" ]; then 
-  echo "❌ Не найдено подходящих скриптов." 
-  exit 1 
-fi 
- 
-# Выбор через fzf с превью полного описания 
-SELECTED_LINE=$(cat "$TMP_LIST" | \ 
-  fzf --prompt="🚀 Выберите скрипт: " \ 
-      --preview='FILE=$(echo {} | cut -d"|" -f2); \ 
-      [ -f "$FILE" ] && awk "/^# ==AUTOEXEC==/{flag=1; next} /^$/{flag=0} flag && /^#/ { sub(/^# ?/, \"\", \$0); print }" "$FILE" || echo "❌ Файл не найден: $FILE"' \ 
-      --preview-window=right:60%:wrap) 
- 
-if [ -z "$SELECTED_LINE" ]; then 
-  echo "❎ Отмена пользователем." 
-  exit 0 
-fi 
- 
-SELECTED_FILE=$(echo "$SELECTED_LINE" | cut -d'|' -f2) 
- 
-# Запуск с подтверждением 
-echo "⚠️ Выбран скрипт: $(echo "$SELECTED_LINE" | cut -d'|' -f1)" 
-echo "📂 Файл: $SELECTED_FILE" 
-echo "Запустить его? (y/N):" 
-read -r confirm 
-if [[ "$confirm" =~ ^[Yy]$ ]]; then 
-  echo "🚀 Запуск..." 
-  bash "$SELECTED_FILE" 
-else 
-  echo "❎ Отмена." 
-fi 
- 
-rm -f "$TMP_LIST" 
-</file>++++ 
- 
- 
- 
projects/projects.1742659957.txt.gz · Последнее изменение: 127.0.0.1

Если не указано иное, содержимое этой вики предоставляется на условиях следующей лицензии: CC Attribution 4.0 International
CC Attribution 4.0 International Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki