PS1 问题,CLI 混乱

PS1 问题,CLI 混乱

我做了一个简单的 PS1 作业

PS1="\e[0;31m[\W]\$ \e[m "

我只想更改提示颜色并仅显示相对路径。但是这会弄乱 CLI。例如,当使用浏览历史记录时,它会裁剪并重叠显示。当我输入长命令时,光标会移动到屏幕的开头,与提示显示本身重叠。我做错了什么?

答案1

这是因为 bash 认为提示符比实际要长。\e[0;31m例如,转义序列会被终端吸收,从而将后面的文本变成红色,但 bash 并不知道这一点。因此,您必须告诉 bash,该字符序列不应计入提示符的长度,您可以通过将其括在 中来实现这一点\[ \]。我还建议使用 tput,而不是硬编码终端转义序列。

red=$(tput setaf 1)
reset=$(tput sgr0)
PS1='\[$red\][\W]\$\[$reset\] '

Bash常见问题 53终端代码(ANSI/VT100)介绍了解更多信息。

相关内容