Bash

使用自定義 PS1 提示時,Bash 會覆蓋第一行

  • July 16, 2015

我的問題與這個問題相似,但不同。

我在我的 中創建了一個自定義 PS1 .bashrc,如下所示:

STARTCOLOR='\e[0;36m';
ENDCOLOR="\e[0m"
export PS1="\n$STARTCOLOR\u@\h:\! <\t> \w\n\$ $ENDCOLOR"

看起來像這樣(但當然有顏色):

tony@home:515 <17:04:52> ~/IdeaProjects/SomeProject
$ gedit ~/.bashrc

在將我的項目連結到遠端 git 儲存庫時,我首先註意到了這個問題。我期望以下(當然不是真正的回購):

$ git remote add origin https://tony@bitbucket.org/tony/someproject.git

但是得到了(請注意,它甚至覆蓋了我的 PS1 的一部分):

project.gitte add origin https://tony@bitbucket.org/tony/some

即使有這種視覺上的怪異,這些命令仍然有效。

tl;dr當我有超過一行的長命令時,第二行會覆蓋第一行。任何想法為什麼?

將您的顏色轉義序列包含在\[和中\](如您連結到的問題的答案中所述)以將它們標記為不可列印字元。

這樣,bash在計算應該移動到新行的字元數之後,不會將它們計入提示長度。

STARTCOLOR='\e[0;36m'
ENDCOLOR="\e[0m"
export PS1="\n\[$STARTCOLOR\]\u@\h:\! <\t> \w\n\$ \[$ENDCOLOR\]"

引用自:https://unix.stackexchange.com/questions/216576