~/.bashrc
我通过在文件中附加以下代码块来缩短我的 bash 提示符。
get_PS1(){
local pwdmaxlen=30
local trunc_symbol="\[$(tput setaf 1)$(tput bold)\]..."
if [[ "${#PWD}" -gt "$pwdmaxlen" ]]; then
local right_chunk="\[$(tput setaf 4)$(tput bold)\]${PWD:$((${#PWD}-$pwdmaxlen)):${#PWD}}\[$(tput sgr0)\]"
PS1="${trunc_symbol}${right_chunk} \$ "
else
PS1="\[$(tput setaf 4)$(tput bold)\]\$(pwd) \$\[$(tput sgr0)\] "
fi
}
PROMPT_COMMAND=get_PS1
当它处于活动状态时,我的意思是之后exec bash
,如果我创建一个虚拟环境virtualenv venv
并随后使用 激活它source venv/bin/activate
,(venv)
应该会出现在 bash 提示符的开头。无法理解我正在运行虚拟环境,尽管which python
事实上确实表明我在虚拟环境中。
据我了解,这只发生在我使用PROMPT_COMMAND
变量时。没关系,我在get_PS1
函数内部做了什么类型的修改,它总是会这样。我知道PROMPT_DIRTRIM
路,但这不是我要找的。
Bash 版本是5.0.17(1)-release
. 我正在运行 Kubuntu 20.04.3 LTS。
顺便说一句,我从这里学到了这个代码块。
谢谢。让我知道是否需要任何其他信息。
它可以在
VIRTUAL_ENV
变量的帮助下完成。当一个虚拟环境例如。env
被激活,它的路径被存储在VIRTUAL_ENV
并且可以用echo $VIRTUAL_ENV
.现在格式化、过滤和存储虚拟环境名称:
之后,在需要时将
virt_env
变量附加到PS1
。添加新逻辑后,get_PS1
将如下所示:注意:代码
if-else
块可能会得到改进,但它为我完成了这项工作。