我有以下 bash 提示符:
YELLOW="\[\033[0;33m\]"
GREEN="\[\033[0;32m\]"
RESET='\e[0m'
export PS1="$GREEN[\W]$YELLOW \$(__git_ps1 \"(%s) \")$RESET\\$ "
它看起来像这样:
这正是我想要的。但是,当我输入很长的一行时,它根本不会中断该行,而是从行首覆盖当前行。当发生这种情况并按下退格键时,该行中的所有内容都会消失。我该如何解决这个问题?
答案1
您忘记包装 的值了$RESET
。
重置='\[\e[0m\]‘
Bash 必须知道提示符的长度,才能使自动换行正常工作,并且不是\[
和之间\]
被计算。
答案2
更加便携的使用tput
:
fgred="$(tput setaf 1)"
fggreen="$(tput setaf 2)"
fgyellow="$(tput setaf 3)"
fgblue="$(tput setaf 4)"
fgpurple="$(tput setaf 5)"
fgcyan="$(tput setaf 6)"
fgwhite="$(tput setaf 7)"
bgred="$(tput setab 1)"
bggreen="$(tput setab 2)"
bgyellow="$(tput setab 3)"
bgblue="$(tput setab 4)"
bgpurple="$(tput setab 5)"
bgcyan="$(tput setab 6)"
bgwhite="$(tput setab 7)"
bold="$(tput bold)"
underline="$(tput smul)"
reset="$(tput sgr0)"
export PS1="${fggreen}[\W]${fgyellow} \$(__git_ps1 \"(%s) \")${reset}\\$ "