1

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

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

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

有什么办法让它工作吗?

4

1 回答 1

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来确定使用哪种颜色。

于 2013-11-22T16:59:14.470 回答