我一直在忙着.bashrc
,试图获得一个新的彩色PS1
,如果我使用的是Python virtualenv,它可以自动告诉我。我对Bash非常非常新,所以经过一些研究我创造了这样的东西(简化为了清晰):
function virtualenv {
if [ -n "$VIRTUAL_ENV" ]; then
VIRTUAL=" $BLACK($GREEN`basename $VIRTUAL_ENV`$BLACK)"
else
VIRTUAL=""
fi
}
PS1="$BLUE\u@\h\$VIRTUAL $YELLOW\\$ $RESET"
希望在$BLACK
中解释$GREEN
和PS1
变量,但我得到的是这样的内容:
gabe@notebook \e[30m(\e[32mmyproject\e[30m) $
好像Bash独自逃离了我的整个VIRTUAL
变量......我已经尝试过我的有限技能允许的斜线,引号和命令的每一种组合......任何帮助?
答案 0 :(得分:0)
当您将字符串括在单引号
中时,可以阻止bash替换字符串中的变量VIRTUAL=' $BLACK($GREEN`basename $VIRTUAL_ENV`$BLACK)'
这会将字符串存储在变量VIRTUAL
中。如果要替换它的一部分,则必须关闭单引号并将部分替换为双引号
A=x
B=y
C=z
V='$A$B$C'
W='$A'"$B"'$C'
将V
保留为$A$B$C
,将W
保留为$Ay$C
。
答案 1 :(得分:0)
首先 - virtualenv函数不会像你那样被调用。以下实际上在virtualenv
评估期间调用了您的函数(最好不要命名为PS1
):
function virtualenv_prompt {
[[ -n $VIRTUAL_ENV ]] && \
printf %s " $BLACK($GREEN"'$(basename "$VIRTUAL_ENV"'"$BLACK)"
}
PS1="$BLUE\u@\h"'$(virtualenv_prompt)'" $YELLOW\\$ $RESET"
也就是说,这仍然不会按照你想要的方式工作,因为\[
和\]
转义(防止shell计算颜色代码作为换行符打印字符所必需的)直接包含在PS1
中,不能替换为。
为了使其正确,您不仅需要添加此类转义(如果它们尚未包含在代码定义中),还需要将颜色代码移出virtualenv
函数并使其无条件存在(即使颜色来回切换,没有可见的内容)。另请参阅http://mywiki.wooledge.org/BashFAQ/053
答案 2 :(得分:0)
您在此处转义了美元符号:\$VIRTUAL
,因此$VIRTUAL
在分配给PS1
时不会展开(因为它成为文字$
,您看到了)
因此,$VIRTUAL
只有在生成提示时才会展开,这就是为什么而不是格式化,您会看到定义格式的字符串
基本上,在分配给\
\$VIRTUAL
中的PS1