Рейтинг:0

Не удается увидеть имя виртуальной среды python в приглашении bash, когда PROMPT_COMMAND используется для изменения PS1

флаг bt

Я сократил свое приглашение bash, добавив следующий блок кода в ~/.bashrc файл.

получить_PS1(){
    локальный pwdmaxlen=30
    local trunc_symbol="\[$(tput setaf 1)$(tput жирным шрифтом)\]..."
    
    если [[ "${#PWD}" -gt "$pwdmaxlen" ]]; тогда
        local right_chunk="\[$(tput setaf 4)$(tput жирным шрифтом)\]${PWD:$((${#PWD}-$pwdmaxlen)):${#PWD}}\[$(tput sgr0) \]"
        PS1="${trunc_symbol}${right_chunk} \$ "
    еще
        PS1="\[$(tput setaf 4)$(tput жирным шрифтом)\]\$(pwd) \$\[$(tput sgr0)\] "
    фи
}

PROMPT_COMMAND=get_PS1

Когда он активен, я имею в виду после исполнительный удар, если я создам виртуальную среду с виртуальный и впоследствии активировать его с помощью источник venv/bin/активировать, (венв) должен был появиться в начале приглашения bash. Нет никакого способа понять, что я запускаю виртуальную среду, хотя какой питон на самом деле показывает, что я нахожусь в виртуальной среде.

Насколько я понимаю, это происходит только тогда, когда я использую PROMPT_COMMAND переменная. Неважно, какую модификацию я сделал внутри get_PS1 функция, она всегда будет вести себя так. я знаю PROMPT_DIRTRIM способ, но это не то, что я ищу.

Баш версия 5.0.17(1)-выпуск. У меня Kubuntu 20.04.3 LTS.

Кстати, я узнал этот кодовый блок от здесь.

Спасибо. Дайте мне знать, если потребуется какая-либо другая информация.

Рейтинг:0
флаг bt

Это можно сделать с помощью VIRTUAL_ENV переменная. Когда виртуальная среда, например. окружение активирован, его путь сохраняется в VIRTUAL_ENV и можно увидеть с эхо $VIRTUAL_ENV.

Теперь отформатируйте, отфильтруйте и сохраните имя виртуальной среды следующим образом:

local virt_env=`printf "($(echo $VIRTUAL_ENV | awk -F "/" '{print $NF}'))"`;

После этого допишите virt_env переменная к PS1 когда требуется. После добавления новой логики get_PS1 будет выглядеть так:

получить_PS1(){
    локальный pwdmaxlen=30
    local trunc_symbol="\[$(tput setaf 1)$(tput жирным шрифтом)\]..."
    local virt_env=`printf "($(echo $VIRTUAL_ENV | awk -F "/" '{print $NF}'))"`;

    если [[ "${#PWD}" -gt "$pwdmaxlen" ]]; тогда
        local right_chunk="\[$(tput setaf 4)$(tput жирным шрифтом)\]${PWD:$((${#PWD}-$pwdmaxlen)):${#PWD}}\[$(tput sgr0) \]";
        если [[ -n "$VIRTUAL_ENV" ]]; тогда
            PS1="${virt_env} ${trunc_symbol}${right_chunk} \$ ";
        еще
            PS1="${trunc_symbol}${right_chunk} \$ ";
        фи
    еще
        если [[ -n "$VIRTUAL_ENV" ]]; тогда
            PS1="${virt_env} \[$(tput setaf 4)$(tput жирным шрифтом)\]\$(pwd) \$\[$(tput sgr0)\] ";
        еще
            PS1="\[$(tput setaf 4)$(tput жирный)\]\$(pwd) \$\[$(tput sgr0)\] ";
        фи
    фи
}

Примечание: в если еще Блоки кода, вероятно, можно было бы улучшить, но мне это помогло.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.