Я сделал некоторые изменения в моем приглашении с использованием цветов через tput.

Похоже, что теперь, когда я пытаюсь выполнить поиск arrow up после нескольких движений вверх, подсказка разрезается пополам, что я имею в виду под этим:

Из этого:

PROD mysuer@server1.domain.com:~$ vim .bashrc

К этому:

PROD mysuer@servegit rebase origin/add_pool

ctrl + c возвращает все к норме.

Я нашел несколько сообщений, указывающих на то, что это может быть связано с отсутствующими побегами для [ однако я не вижу здесь проблемы:

Мой код:

#red for prod, green for lab

COLOUR_RESET=$(tput sgr0)
COLOUR_GREEN=$(tput setaf 2)
COLOUR_BLUE=$(tput setaf 6)
COLOUR_YELLOW=$(tput setaf 3)
COLOUR_RED=$(tput setaf 1)
BOLD=$(tput bold)

if [[ $HOSTNAME =~ .*\.domain.com$ ]]; then
  COLOUR=$COLOUR_RED
  PROMPT_TEXT="PROD"
fi

if [[ $HOSTNAME =~ .*\.lab$ ]]; then
  COLOUR=$COLOUR_BLUE
  PROMPT_TEXT="LAB"
fi


MYPROMPT="$COLOUR$BOLD$PROMPT_TEXT$COLOUR_RESET \[\u@$COLOUR$BOLD$(hostname -f)$COLOUR_RESET:\w\]\$ "

PS1=$MYPROMPT

ОБНОВЛЕНИЕ:@KamilMaciorowski указал на аналогичный вопрос, хотя он не относится к цветам tput.

2 ответа2

1

Мой ответ в другом месте почти достаточен, вы должны заключить вывод tput в \[ \] .

Почти достаточно, потому что у вас уже есть \[ \] в неправильных местах; Вы должны избавиться от них. man 1 bash говорит:

\[
начать последовательность непечатаемых символов, которые можно использовать для встраивания последовательности управления терминалом в приглашение

\]
конец последовательности непечатаемых символов

Это означает, что, например, $(hostname -f) должно быть вне любого \[ \] . Так что либо

  • удалите \[ и \] из явного определения MYPROMPT и замените каждые =$(tput …) на ='\['"$(tput …)"'\]' ;

или же

  • изменить только определение MYPROMPT . Я скорректировал ваш оригинальный:

    MYPROMPT="\[$COLOUR$BOLD\]$PROMPT_TEXT\[$COLOUR_RESET\] \u@\[$COLOUR$BOLD\]$(hostname -f)\[$COLOUR_RESET\]:\w\$ "
    # printing                ^^^^^^^^^^^^                 ^^^^                ^^^^^^^^^^^^^^                 ^^^^^^
    # non-pr.   ^^^^^^^^^^^^                ^^^^^^^^^^^^^        ^^^^^^^^^^^^                  ^^^^^^^^^^^^^
    
-1

В конце мне пришлось сбросить цвета Tput.

Моя последняя подсказка:

if [[ $HOSTNAME =~ .*\.domain.com$ ]]; then
  PROMPT_TEXT="PROD"
  PS1='${debian_chroot:+($debian_chroot)}\[\033[01;31m\]$PROMPT_TEXT\[\033[00m\] \[\033[01;32m\]\u@\H\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
fi

if [[ $HOSTNAME =~ .*\.lab$ ]]; then
  PROMPT_TEXT="LAB"
  PS1='${debian_chroot:+($debian_chroot)}\[\033[01;34m\]$PROMPT_TEXT\[\033[00m\] \[\033[01;32m\]\u@\H\[\033[00m\]:\[\033[01;34m\]\w\[\033[00m\]\$ '
fi

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .