我如何从一个函数的结果彩色bash PS1提示符



我想将我的PS1提示符设置为函数的输出,但是当我尝试包含ansi颜色序列时,bash会认为行长度比实际长,并且当您在它后面键入足够的内容以转到新行时,bash会将其弄乱。下面是代码:

ps1() {
    echo -ne "33[01;34m$(dirs -0)33[0m $ "
}
PS1='$(ps1)'

[]放在转义序列周围。这告诉shell在确定提示符宽度时不计算它们。

ps1() {
    echo -ne "\[33[01;34m\]$(dirs -0)\[33[0m\] $ "
}

请参阅Bash提示转义序列,了解您可以在提示符中使用的所有特殊序列(例如,转义可以使用e而不是33, w用于当前目录而不是$(dirs -0))。

你需要将这些序列中的反斜杠加倍,以防止它们被echo -e吃掉。但是,如果您只使用上页列出的转义序列,则实际上不需要-e,因为bash将处理PS1本身中的转义序列。

最新更新