搞砸了 bash 提示,可能是由于 bashrc 的变化

Messed up bash prompt, probably due to changes in bashrc

我想更改我的 bash 提示符(像任何书呆子一样)并为其保留自定义名称。

我已经想出了可以运行的代码,但是它有一些问题。密码是

if [ "`id -u`" -eq 0 ]; then
    PS1="[ \[\e[1;33m\]| Dragon Master | \[\e[1;36m\]\[\e[49m\] \W \[\e[0m\]]\e[0;37m ";
else
    PS1="\[\e[1;36m\][ \[\e[1;33m\]| Dragon Master | \W $\[\e[1;36m\]]\e[0;37m ";
fi

它工作正常(不完全),

但这有一个问题,当命令大于一行时,它不会转到下一行,而是开始覆盖同一行。像这样,

供参考,上图中的命令为

x86_64-softmmu/qemu-system-x86_64 -m 1024 -enable-kvm -drive if=virtio,file=test.qcow2,cache=none -cdrom Fedora-Live-Desktop-x86_64-20-1.iso

现在,这个奇怪的换行不会以任何方式影响命令。它完美运行。

建议的家伙?

在评论中发布的 link 中找到了答案。

PS1 引用中,每个颜色集前面必须有一个 \[

所以,我的代码变成了,

if [ "`id -u`" -eq 0 ]; then
    PS1="[ \[\e[1;33m\]| Dragon Master | \[\e[1;36m\]\[\e[49m\] \W \[\e[0m\]]\[\e[0;37m\] ";
else
    PS1="\[\e[1;36m\][ \[\e[1;33m\]| Dragon Master | \W $\[\e[1;36m\]]\[\e[0;37m\] ";
fi

摘自 this 回答。