Изменение PS1, только если определенная подстрока еще не в PS1 (bash) - PullRequest
0 голосов
/ 13 апреля 2011

У меня есть эта маленькая изящная штука в моем .bashrc:

has_gitbranch() {
  if [ -e .git ]; then
    GIT_BRANCH='$(__git_ps1 "%s")'
    [ "$GIT_BRANCH" != 'master' ] && export PS1="$GIT_BRANCH$PS1"
  fi
}

venv_cd () {
   cd "$@" && has_gitbranch
}
alias cd="venv_cd"

(я сам не написал и не могу вспомнить, откуда взял)

Проблема в том, что если я вхожу в каталог, который является git-репо, это происходит:

reponamepeterbe@computername:~/directory $

Это нормально, но что произойдет, если я войду в этот каталог снова (например, cd .), тогда это произойдет:

reponamereponamepeterbe@computername:~/directory $

И снова:

reponamereponamereponamepeterbe@computername:~/directory $

Как изменить оператор bash if, чтобы он не добавлял имя ветви git, если он уже находится в $PS1?

Если бы это был Python, я бы просто сделал это:

GIT_BRANCH = get_current_git_repo_name()
if GIT_BRANCH not in PS1: # or PS1.find(GIT_BRANCH) == -1
      PS1 = GIT_BRANCH + PS1

Ответы [ 2 ]

1 голос
/ 13 апреля 2011

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

PS1='.....[\!]$(__git_ps1 "(%s)")\$ '

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

Для записи, вот пример, взятый из git-completion.bash:

PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ '

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

1 голос
/ 13 апреля 2011
case "$PS1" in
"$GIT_BRANCH"*)
    ;;
*)
    PS1="$GIT_BRANCH$PS1"
    ;;
esac

Тем не менее, вы решаете не ту проблему;Я бы хранил базовое значение PS1 в другом месте и всегда собирал PS1 из этого и текущего имени репо.Подумайте, что произойдет, если вы cd /some/other/repo.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...