Динамические элементы в bash PS1

Я добавил следующее в мой файл ~/.localsh, чтобы настроить приглашение bash при работе с git.

В основном я хочу, чтобы текущая ветвь отображалась в моем терминале. Инструмент gitk показывает ветви с зеленым фоном и черным передним планом, вот что я пытаюсь сделать.

То, что у меня есть, работает, но когда я нажимаю стрелку вверх на клавиатуре, чтобы прокрутить предыдущие команды, оно перезаписывается.

Это случилось раньше, когда вы не заканчивали последовательность цветов с помощью [\e[0m]. Теперь это происходит со мной из-за вызова функции getgitbranch. Я думаю, что это как-то связано с терминалом, не зная, как долго это приглашение.

Итак, вот вопрос... Как правильно использовать динамические элементы в моем приглашении bash и не использовать их при использовании стрелок вверх?

function getgitbranch()
{
git branch | grep "^\*" | cut -c3-
}

function blabla()
{
PS1=""
PS1="$PS1\[\e[0;30m\]\[\e[42m\]\[\$(getgitbranch)\]\[\e[0;49m\]\[\e[0m\] "
PS1="$PS1\[\e[1;35m\][\[\e[0m\]"
PS1="$PS1\[\e[1;33m\]\w\[\e[0m\]"
PS1="$PS1\[\e[1;35m\]]\[\e[0m\]"
PS1="$PS1 \[\e[1;31m\]>\[\e[0m\] "
export PS1
}

1 ответ

Решение

Удалить \[\] со всего $(getgitbranch), Символы, выводимые этой функцией, фактически занимают место на экране, поэтому вы хотите, чтобы Bash их учел. С помощью \[\] говорит , не считайте символы, которые появляются внутри.

Другие вопросы по тегам