Строка перезаписывается вместо продолжения на той же строке

Строка перезаписывается вместо продолжения на той же строке

У меня проблема с приглашением bash. Когда я ввожу команду, длина которой превышает ширину экрана, она продолжается на той же строке и перезаписывает то, что я написал, а затем продолжается на строке 2.

Это моя PS1:

PS1="\$(git_prompt) ${BIWhite}\W${Color_Off} → "

Переменные

BIWhite='\e[1;97m'
Color_Off='\e[0m'

И затем скрипт для git_prompt:

git_prompt() {
local g="$(__gitdir)"
if [ -n "$g" ]; then
    local MINUTES_SINCE_LAST_COMMIT=`minutes_since_last_commit`
    if [ "$MINUTES_SINCE_LAST_COMMIT" -gt 30 ]; then
        local COLOR=${BRed}
    elif [ "$MINUTES_SINCE_LAST_COMMIT" -gt 10 ]; then
        local COLOR=${BIYellow}
    else
        local COLOR=${BGreen}
    fi
    local SINCE_LAST_COMMIT="${COLOR}$(minutes_since_last_commit)m${Color_Off}"
    # The __git_ps1 function inserts the current git branch where %s is
    local GIT_PROMPT=`__git_ps1 "(%s|${SINCE_LAST_COMMIT})"`
    echo ${GIT_PROMPT}
fi}

Ценю любую помощь! Спасибо!

решение1

Символы, которые не перемещают курсор, должны быть заключены между \[и \]в PS1, в противном случае bash посчитает, что приглашение длиннее, чем оно есть на самом деле. И из-за того, как используется эта переменная, у вас не может быть функции, выдающей цветной текст, поскольку вы не можете правильно его экранировать.

Видетьhttp://mywiki.wooledge.org/BashFAQ/053для более подробного объяснения.

Связанный контент