【发布时间】:2012-11-19 02:11:31
【问题描述】:
我一直在搞乱.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 变量...我已经尝试了我有限技能所允许的斜线、引号和命令的所有组合...有什么帮助吗?
【问题讨论】:
-
查看 Bash Hackers Wiki 上的引用和转义:wiki.bash-hackers.org/syntax/quoting 您需要在颜色字符串上加上单引号。
-
@ReubenMorais 我刚刚在颜色字符串 ($BLUE) 和 $VIRTUAL 变量中尝试了不同的单引号组合。我得到相同的结果或像 gabe@notebook $BLACK($GREENmyproject$BLACK) 这样的文字表示
-
什么版本的 bash?如果是 pre-4.x,那么它不理解
\e转义;您必须改用\033(或\x1b,或通过键入control-V 输入的文字转义,或...)。 -
@MarkReed bash 版本 4.2.24。其他彩色文本工作正常,只是设置在不同变量中的那些行为不端
-
您的括号可能被解释为对子外壳的调用。现在试着把它们拿出来。此外,进一步简化您的测试。看看你是否不能先让一种颜色起作用。正如 Gabe 所说,单引号应该保护那些变量值。在此处搜索堆栈溢出以查找
[bash] prompt problems,因为这类问题经常被问到。 (你的项目比大多数项目更有趣!)。祝大家好运。