我使用的是 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
)。