终端提示被写在[重复]之上

终端提示被写在[重复]之上

我应该先说这个终端会话是通过 ssh 从 Windows PuTTY 到 Linux OpenSSH。我不确定这是否重要,但我想无论如何我都应该说出来。

目前,当我在终端中写入的内容多于一行时,文本会从同一行开始,而不是新的一行,并导致我的提示如下:

trevor@SEARS-SERVER:~$

对此(当然是示例文本):

ne lineSEARS-SERVER:~$ this is the text line that is too long to fit on o

目前我的 PS1 在 .bashrc 中设置为:

export PS1="\n[$(date +%r)] \e]0;\e[0;32m\u\e[m@\e[38;5;52m\h\e[m:\e[38;5;240m\w\e[m\e[97m$\e[m"

此外,当窗口低于一定宽度时,会发生这种情况:

m$ :32:40 PM] trevor@SEARS-SERVER:~

我知道这与我的 PS1 配置或 PuTTY 有关,但我不知道是哪个,或者为什么/如何。有什么帮助吗?

答案1

问题是你的提示:

export PS1="\n[$(date +%r)] \e]0;\e[0;32m\u\e[m@\e[38;5;52m\h\e[m:\e[38;5;240m\w\e[m\e[97m$\e[m"

要使 bash 忽略转义序列(非打印),您必须将它们用\[和括起来\]

否则,bash 会将这些内容计入屏幕上提示长度的一部分,并且会对终端何时自动换行到下一行感到困惑。

像这样的事情会有所帮助:

export PS1="\n[$(date +%r)] \[\e]0;\e[0;32m\]\u\[\e[m\]@\[\e[38;5;52m\]\h\[\e[m\]:\[\e[38;5;240m\]\w\[\e[m\e[97m\]$\[\e[m\]"

相关内容