我做了一个简单的 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)介绍了解更多信息。