2016-04-29 47 views
1

我想改變我的bash提示符(像任何書呆子)併爲它保留一個自定義名稱。搞砸了bash提示符,可能是由於bashrc中的更改

我已經想出了可行的代碼,但它有一些問題。該代碼是

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 

現在,這種怪異的換行不會以任何方式影響的命令。它完美的作品。

建議人?

+2

[此鏈接](http://askubuntu.com/questions/24358/how-do-i-get-long-command-lines-to-wrap-to-the-next-line)可能有幫助 – Tico

+0

@ Tico,非常感謝兄弟。問題解決了。 :) – Haris

+0

很高興我可以幫助:) – Tico

回答

0

在評論中發佈的鏈接中找到了答案。

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

+0

澄清:你不需要'\\ ['在PS1中。你需要的是''[']在結尾處的任何非打印字符的開頭,'\]'。在雙引號字符串中使用'\\ [''在PS1中得到'\ ['',因爲雙引號字符串被內插並且第一個反斜槓被去除。你真的應該使用單引號來完成這項任務:它會使它更乾淨。 –

+0

事實上,看着你的原代碼,它看起來像你所需要做的就是將''''改爲''' –

+0

@WilliamPursell,謝謝,我只是遵循我從那個鏈接得到的,並且它工作。也試試這個。 – Haris