Имя ответвления мерзавца в оболочке удара не исчезает на не каталоги мерзавца

Я использую это руководство для добавления имени ответвления мерзавца к переменной PS1. Я изменил его немного, чтобы оставить мою текущую быструю тему и добавить, что зеленый фон к мерзавцу переходит имя.

parse_git_branch() {
     git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/ (\1)/'
}

export PS1="$PS1\e[30;48;5;82m$(parse_git_branch)\e[0m \[\033[00m\]"

Похож все работает, но когда я оставляю каталог, имя ответвления мерзавца остается. И Если я выполняю терминал в не каталог мерзавца и CD в мерзавца, я не вижу название ответвления. Но когда я открываю другую терминальную вкладку, я вижу его.

Я использую терминал Guake с оболочкой Bash.

0
задан 27 October 2016 в 14:15

2 ответа

Это происходит, потому что Ваша подсказка устанавливается на значение parse_git_branch, когда подсказка установлена, Вам нужен он для выполнения функции каждый раз ее выполнение.

необходимо поместить \ перед $(parse_git_branch) так, чтобы доллар был спрятан, когда подсказка установлена так не выполненный. Когда подсказка будет выполнена, доллар затем будет видим, и команда в скобках будет выполнена, таким образом показывая правильное значение для папки, в которой Вы находитесь.

export PS1="$PS1\e[30;48;5;82m\$(parse_git_branch)\e[0m \[\033[00m\]"

Это объяснено в документах удара о 2-м абзаце этой страницы http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x279.html

, Другой полезный прием здесь должен выполнить /bin/bash -x и попробовать его, это показывает Вам намного больше того, что происходит.

3
ответ дан 28 September 2019 в 07:44

Полагаю, вы добавили часть кода в свой ~/.bashrc. Это означает, что переменная PS1 устанавливается только один раз, а затем не меняет значение при смене каталогов. Чтобы это работало, значение PS1 необходимо пересматривать после каждого cd.

Одним из способов решения этой проблемы является установка PROMPT_COMMAND на функцию, которая сбрасывает PS1. Значение PROMPT_COMMAND оценивается перед каждым приглашением bash (см. man bash).

Однако, более простой способ - установить liquidprompt, который делает то, что вы хотите, и многое другое.

sudo apt-get install liquidprompt && liquidprompt_activate

Затем вы можете настроить свой динамический запрос в соответствии с вашим сердцем.

1
ответ дан 28 September 2019 в 07:44

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

Похожие вопросы: