【问题标题】:Messed up bash prompt, probably due to changes in bashrc混乱的 bash 提示,可能是由于 bashrc 的变化
【发布时间】:2016-08-24 21:27:45
【问题描述】:

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

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

建议的家伙?

【问题讨论】:

  • This link 可能会有所帮助
  • @Tico,非常感谢兄弟。问题解决了。 :)
  • 很高兴我能帮上忙 :)

标签: bash shell prompt


【解决方案1】:

在 cmets 中发布的链接中找到了答案。

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

【讨论】:

  • 澄清一下:PS1 中不需要\\[。您需要的是任何非打印字符开头的\[,以及结尾的\]。您在双引号字符串中使用\\[\[ 输入PS1,因为双引号字符串被插入并且第一个反斜杠被剥离。你真的应该在这个作业中使用单引号:这样会更简洁。
  • 事实上,看看你的原始代码,你需要做的就是将"更改为'
  • @WilliamPursell,谢谢。我只是按照从该链接获得的信息进行操作,并且有效。我也会试试这个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-08-21
  • 1970-01-01
  • 1970-01-01
  • 2020-04-14
  • 1970-01-01
  • 1970-01-01
  • 2019-03-13
相关资源
最近更新 更多