Подтвердить что ты не робот

Добавить git имя ветки в командной строке

Я хотел использовать одну из функций Git -completion.bash, но я не могу настроить внешний вид, который хотел бы иметь. Вот соответствующая часть моего .bash_profile:

source ~/.git-completion.bash

function prompt
{
local WHITE="\[\033[1;37m\]"
local GREEN="\[\033[0;32m\]"
local CYAN="\[\033[0;36m\]"
local GRAY="\[\033[0;37m\]"
local BLUE="\[\033[0;34m\]"
export PS1="
${GREEN}\u${CYAN}@${BLUE}\h ${CYAN}\w $(__git_ps1 '(%s)') ${GRAY}
$ "
}
prompt

и не отображает имя ветки.

Однако, если я заменю экспорт PS1 выше на приведенный ниже, он работает как ожидалось:

export PS1='\w$(__git_ps1 "(%s)") > '

Я предполагаю, что это некоторые проблемы с апострофом/кавычками.

Как мне исправить 1-ю версию, чтобы заставить ее работать?

4b9b3361

Ответ 1

Трюк для правильного цитирования состоит в том, чтобы иметь eveything с двойным кавычком, за исключением $(__git_ps1 "(%s)"), который имеет одинарные кавычки.

source ~/.git-completion.bash
function prompt
{
local WHITE="\[\033[1;37m\]"
local GREEN="\[\033[0;32m\]"
local CYAN="\[\033[0;36m\]"
local GRAY="\[\033[0;37m\]"
local BLUE="\[\033[0;34m\]"
export PS1="
${GREEN}\u${CYAN}@${BLUE}\h ${CYAN}\w"' $(__git_ps1 "(%s)") '"${GRAY}"
}
prompt

Альтернативным решением является замена $( на \$( в коде в вопросе.

Фоновая информация: происходят две замены: сначала в export PS1="..." время, а затем, когда отображается приглашение. Вы хотите выполнить __git_ps1 каждый раз, когда отображается приглашение, поэтому вы должны убедиться, что первая подстановка сохраняет $(...) неповрежденной. Таким образом, вы пишете либо '$(...)', либо "\$(...)". Это две основные идеи решений, которые я предложил.

Ответ 2

Не уверен, но vcprompt может решить его лучше для вас?