自定义 PS1 或 Bash 提示时出现问题

自定义 PS1 或 Bash 提示时出现问题

我使用的是 Linux Mint 20.1 Cinnamon,这次并不重要,

我在自定义 PS1 时遇到问题,或者通常 Bash 提示对最后一个字符$(用户)进行着色;#(根)。

当前 PS1 代码位于.bashrc

if [ "$color_prompt" = yes ]; then
    color_red=$(tput bold)$(tput setaf 1)
    color_green=$(tput bold)$(tput setaf 2)
    color_reset=$(tput sgr0)
    PS1='${debian_chroot:+($debian_chroot)}\u @ \h $PWD $color_green\$$color_reset '
else
    PS1='${debian_chroot:+($debian_chroot)}\u @ \h $PWD \$ '
fi

问题描述:

当我启动终端 ( gnome-terminal) 时,它看起来很好,但如果我使用箭头键查看历史记录,则在大约 10 次以上后,文本会出现乱码:

乱码终端示例

我无法解释,你能解释吗?我究竟做错了什么?

PS:我不确定为什么它用单引号,如果我可以将其更改为双引号......


失败#2

刚刚尝试将其“转换”为双引号格式,这在将历史记录增加十几次或多次时再次导致麻烦。

PS1="\u @ \h \[\$PWD\] \[$(tput bold)\]\[$(tput setaf 2)\]\\$\[$(tput sgr0)\] "

失败#3

我现在开始放弃了,我最后的机会是直接使用转义序列,如下所示:

PS1='\u @ \h $PWD \e[1;32m\$ \e[0m'

正如前面所描述的,它使我的终端出现乱码,我目前将其设置为没有颜色才能工作。

答案1

PS1='${debian_chroot:+($debian_chroot)}\u @ \h $PWD \[$color_green\]\$\[$color_reset\] '

我的这个答案。您需要换行\[ \]任何不可打印的序列,仅此而已。打印的片段(即添加到提示的长度)不应被换行。

在你的尝试中,你要么包裹得太少(就像什么都没有),要么包裹得太多($PWD)。

相关内容