我应该先说这个终端会话是通过 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\]"