как изменить поведение conda 'source activ' ps1

мой текущий bash ps1 выглядит следующим образом:

bldred='\e[1;31m' # Red
bldcyn='\e[1;36m' # Cyan
bldwht='\e[1;37m' # White
txtrst='\e[0m'    # Text Reset - Useful for avoiding color bleed

export PS1="\n\[$bldred\]\u\[$txtrst\]@\[$bldwht\]\h\[$txtrst\]:\[$bldcyn\]\w\[$txtrst\]$ "

Тем не менее, работает:

source activate <env-name-here>

по умолчанию сообщает conda добавить env-name к моему PS1:

(<env-name-here>)
user@short-domain:fullpath$

Есть ли способ сказать conda вместо этого вставить env-name в мой PS1, в частности, сразу после новой строки?


person jkarimi    schedule 27.02.2017    source источник
comment
Я вообще не знаю conda, но не могли бы вы просто передать ему строку <env-name-here>\n и удалить \n из своей PS1?   -  person Aaron    schedule 27.02.2017
comment
@Aaron Аарон, я объясняю, как сделать именно то, что вы описали здесь: stackoverflow.com/q/62842563. jkarimi, кажется, спрашивает, как сохранить <env-name-here> в той же строке, что и остальная часть его строки подсказки, поэтому добавление завершающей новой строки к <env-name-here> приведет к провалу.   -  person drmuelr    schedule 11.07.2020
comment
Помимо сути, но вам не нужно export PS1   -  person wjandrea    schedule 03.10.2020


Ответы (2)


В Conda есть параметр для отключения изменения подсказки: changeps1: False~/.condarc). Затем вы можете добавить это самостоятельно ($(basename "$CONDA_PREFIX")).

Это похоже на virtualenv, который не обновляет приглашение, если установлено $VIRTUAL_ENV_DISABLE_PROMPT, поэтому вы можете распечатать $(basename "$VIRTUAL_ENV") самостоятельно.

person remram    schedule 30.03.2018
comment
вместо CONDA_PREFIX я использовал CONDA_PROMPT_MODIFIER в своей PS1 для более плавной интеграции. - person Adriano; 09.05.2019
comment
@Adriano, если вам не нужно вставлять CONDA_PROMPT_MODIFIER в середину PS1 (т.е. добавление в начале все еще в порядке), опубликованные мной вопросы и ответы еще чище: stackoverflow.com/q/62842563 - person drmuelr; 11.07.2020

Самое простое решение, которое я нашел, это переместить новую строку с PS1 на PROMPT_COMMAND:

PROMPT_COMMAND="printf '\n'"
export PS1="\[$bldred\]\u\[$txtrst\]@\[$bldwht\]\h\[$txtrst\]:\[$bldcyn\]\w\[$txtrst\]$ "

Это позволяет conda сохранять поведение по умолчанию PS1 при разделении команд bash символами новой строки:

user@short-domain:fullpath$ source activate <env-name-here>

(<env-name-here>) user@short-domain:fullpath$
person jkarimi    schedule 27.02.2017