PS1正确包装在Bash中

时间:2013-11-22 14:15:27

标签: bash ps1

我想执行一个命令,将一些动态信息写入shell提示符。如果我静态地进行着色,它可以正常工作,因为我可以在转义句之前和之后放置\[\]

 '\[\e[0;91m\]$(printSomething)\[\e[0m\]'

但是如果着色是动态的,并且我希望外部脚本打印它,那么它就不起作用了。现在我不能直接将转义序列写入PS1。但是如果外部脚本打印\[\],那么shell会按字面意思显示它。

有没有办法让它发挥作用?

1 个答案:

答案 0 :(得分:2)

每次显示时PROMPT_COMMAND都会重置PS1。要采取原始提示:

prompt_cmd () {
    PS1='\[\e[0;91m\]'
    PS1+=$(printSomething)
    PS1+='\[\e[0m\]'
}

PROMPT_COMMAND=prompt_cmd

我假设你想要一些不同的颜色。为此,您可以使用prompt_cmd读取的一些环境变量:

prompt_cmd () {
    PS1="\[\e[0;${PROMPT_COLOR}m\]" # note the double quotes
    PS1+=$(printSomething)
    PS1+='\[\e[0m\]'
}

或者您可以在prompt_cmd本身运行一些代码来确定要使用的颜色。