Динамические элементы в 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 их учел. С помощью \[\]
говорит , не считайте символы, которые появляются внутри.