# ---------- Цвета ---------- RED="\[\033[0;31m\]" GREEN="\[\033[0;32m\]" YELLOW="\[\033[1;33m\]" BLUE="\[\033[1;34m\]" PURPLE="\[\033[0;35m\]" RESET="\[\033[0m\]" # Не даём стандартному venv ломать наш PS1 export VIRTUAL_ENV_DISABLE_PROMPT=1 # ---------- Функция, которая вызывается перед показом приглашения ---------- set_bash_prompt() { local exit_code=$? # Символ приглашения: красный, если предыдущая команда упала local prompt_symbol="$" if [ "$exit_code" -ne 0 ]; then prompt_symbol="${RED}\$${RESET}" fi # ---- venv ---- local venv_part="" if [ -n "$VIRTUAL_ENV" ]; then venv_part="${BLUE}($(basename "$VIRTUAL_ENV"))${RESET} " fi # ---- git branch ---- local branch="" # Быстрее и проще, чем парсить `git branch` через sed branch=$(git rev-parse --abbrev-ref HEAD 2>/dev/null) local git_part="" if [ -n "$branch" ] && [ "$branch" != "HEAD" ]; then git_part=" ${PURPLE}($branch)${RESET}" fi # ---- Собираем двухстрочный PS1 ---- # Пример: # (myenv) dmitry@wsl:/mnt/d/projects/myproj (main) # $ PS1="\n${venv_part}${GREEN}\u@\h${RESET}:${YELLOW}\w${RESET}${git_part}\n${prompt_symbol} " } # Запускаем set_bash_prompt перед каждым показом приглашения PROMPT_COMMAND=set_bash_prompt