Получение gitprompt для запуска при выполнении команд - PullRequest
2 голосов
/ 14 декабря 2011

В bash я использую gitprompt для отображения текущего состояния моего git-репозитория, поэтому мой PS0 выглядит следующим образом: [время] [имя репо] [текущий путь] [количество добавленных / измененных файлов] $ Thisустанавливается в ~ / .bashrc, где я экспортирую PROMPT_COMMAND

export PROMPT_COMMAND=$PROMPT_COMMAND';export PS1=$(gitprompt.pl c=\+ u=\~ f=\* A=\^ B=\\\\ F=\ \>\> statuscount=1)'

Я также использую экран (который может вступить в игру в этом вопросе).Когда я создаю новое окно экрана, он автоматически получает исходный файл .bashrc, поэтому мой PS0 обновляется с последним статусом git для этого репозитория, к сожалению, это единственный раз, когда мой PS0 обновляется со статусом git.

Как бы янастроить это так, чтобы мой статус git обновлялся каждый раз, когда я запускаю команду в терминале или только для определенных команд?

Мне нужно будет запускать статус git только при закрытии файла, перемещении, удалении или копировании;поэтому, если бы я мог настроить приглашение на запуск только для этих команд, это было бы лучше, но я бы согласился на то, чтобы оно выполнялось для каждой команды bash (без привязки его к моему ключу возврата).

Вот мой весьподскажите в ~ / .bashrc

export PS0='\[\e[0;32m\][\t]\[\e[1m\][\h]\[\e[0;1m\][\w]\[\e[30;1m\]%{\[\e[1;32m\][%b]\[\e[0m\][%c%u%f%t]%}%{[%B%A%F]%}\[\e[0m\]\u\$ '
PS1=$(gitprompt.pl c=\+ u=\~ f=\* A=\^ B=\\\\ F=\ \>\> statuscount=1)
export PROMPT_COMMAND=$PROMPT_COMMAND';export $PS1'

Ответы [ 2 ]

1 голос
/ 17 февраля 2012

Мне кажется, что проблема, с которой вы сталкиваетесь, заключается в том, что вы уже находитесь в одинарных кавычках, поэтому он не хочет анализировать команду во второй раз. Можно обойти это, поместив назначение PS1 в функцию bash, а затем установив PROMPT_COMMAND:

function prompt_command() {
    PS1='$(gitprompt.pl c=\+ u=\~ f=\* A=\^ B=\\\\ F=\ \>\> statuscount=1)'
}

export PROMPT_COMMAND=prompt_command

Может также оказаться возможным поместить ваш скрипт gitprompt.pl в функцию и вернуть нужные вам результаты, чтобы он печатал результат только в том случае, если он находится внутри репозитория git. Это может быть достигнуто с помощью чего-то похожего на следующее:

export PS1='\[\e[1;37m\][\[\e[1;32m\]\h\[\e[1;37m\]:\[\e[1;36m\]\w\[\e[1;37m\]]$(parse_git_branch)$ \[\e[0m\]'

parse_git_branch() {
    BRANCH=$( git branch --no-color 2> /dev/null )
    # only run the gitprompt script if we're in a git repository
    if [ -n "$BRANCH" ]; then
        GITPROMPT=$(gitprompt.pl c=\+ u=\~ f=\* A=\^ B=\\\\ F=\ \>\> statuscount=1)
        printf "\e[1;33m[$GITPROMPT]\e[1;37m"
    fi
}

(Примечание: это не проверено, может потребоваться несколько настроек)

0 голосов
/ 14 декабря 2011

Вы хотите что-то вроде этого:

PS1="\$(gitprompt.pl) "

, то есть: предотвратить немедленную оценку gitprompt.pl путем экранирования команды.

Таким образом, ваш $(gitprompt.pl) будет оцениваться всякий раз, когда нужно показать PS1.

...