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

时间:2016-04-29 16:13:47

标签: bash shell prompt

我想改变我的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

它工作正常(不完全),

The demo

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

Another demo

作为参考,上图中的命令是

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

现在,这种奇怪的换行不会以任何方式影响命令。它运作得很好。

建议伙伴?

1 个答案:

答案 0 :(得分:1)

在评论中发布的链接中找到答案。

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回答。