Bash

提示:通過命令切換刪除行

  • August 31, 2016

我試圖將提示更改為我自己的偏好,但是當我切換我最近輸入的命令(使用鍵箭頭)時,有時帶有提示的整行會被刪除,只有提示的一些字元和我最近輸入的命令仍然存在:

預期輸出:

bucky in [~]: cd ..

輸出:

buccd ..

‘buc’ 是提示的一部分,‘cd ..’ 是我最近輸入的命令。

我的提示:

PS1="\[\033[0;34m\u\] \[\033[0;37min\] \[\033[1;32m[\]\[\033[0;31m\w\]\[\033[1;32m]\]\[\033[0;37m:\] "

為了給你一個視覺化,這裡有一張圖片:

在此處輸入圖像描述

如果需要,我使用的是 Ubuntu 16.04

這是因為提示的列印部分\u in \w位於:轉義方括號中。括號通常放在非列印字元周圍,以告訴 bash 不要為它們移動游標,從而正確計算提示的大小。所以現在游標沒有為列印部分正確移動。

我建議您修改.bashrc設置提示而不是覆蓋它的部分…您可以取消註釋(刪除#)此行:

#force_color_prompt=yes

然後修改此程式碼段中的第二行:

if [ "$color_prompt" = yes ]; then
   PS1='${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
else
   PS1='${debian_chroot:+($debian_chroot)}\u@\h:\w\$ '

所以它說:

PS1='${debian_chroot:+($debian_chroot)}\[\033[00;34m\]\u \[\033[0;37m\]in \[\033[01;32m\][\[\033[0;31m\]\w\[\033[1;32m\]]\[\033[0;37m\]: '

或者,如果您更喜歡將覆蓋放在文件末尾:

PS1='\[\033[00;34m\]\u \[\033[0;37m\]in \[\033[01;32m\][\[\033[0;31m\]\w\[\033[1;32m\]]\[\033[0;37m\]: '

這在 Ubuntu 16.04 中實現了我認為你想要的,並且不會破壞你描述的方式(我之前在玩我的 PS1 時也經歷過!)

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