Базовый скрипт bash для терминала - PullRequest
2 голосов
/ 17 февраля 2012

В настоящее время моя подсказка терминала содержит информацию о git.

Пример чистого каталога: michaelespinosa: ~ / Sites / example.com [git: master]
Пример грязного каталога: michaelespinosa: ~ / Sites / example.com [git: master *]

Я хочу также раскрасить информацию о git (зеленый, если он чистый, или красный, если он грязный).

Я подумал, что мог бы добавить функцию (parse_git_color) и установить ее цвет в соответствии с оператором if else на основе наличия звездочки.

Проблема в том, что он возвращает зеленый цвет как для чистых, так и для грязных каталогов. Я считаю, что проблема связана с оператором if parse_git_dirty == "*", который сравнивает значение значения parse_git_dirty с "*"

function parse_git_dirty {
  [[ $(git status 2> /dev/null | tail -n1) != "nothing to commit (working directory clean)" ]] && echo "*"
}
function parse_git_color {
  if [ parse_git_dirty == "*" ]; then
    echo '\033[0;31m\'
  else
    echo '\033[0;32m\'
  fi
}
function parse_git_branch {
  git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e "s/* \(.*\)/$(parse_git_color)[git:\1$(parse_git_dirty)]/"
}

Любая помощь приветствуется! Спасибо

1 Ответ

3 голосов
/ 18 февраля 2012

Обратите внимание на \$(...) в PS1.Это импорт, потому что только с \$() ваша команда вызывается каждый раз при выводе вашего приглашения.$() вызывается только один раз (при инициализации PS1).

function parse_git_dirty
{
  [[ "$(git status 2> /dev/null | tail -n1)" != "nothing to commit (working directory clean)" ]] && echo "*"
}

function parse_git_color
{
  if [ "$(parse_git_dirty)" == "*" ] ; then
    echo "0;31m"
  else
    echo "0;32m"
  fi
}

function parse_git_branch
{
  git branch --no-color 2> /dev/null | sed -e '/^[^*]/d' -e "s/* \(.*\)/[git:\1$(parse_git_dirty)]/"
}

export PS1="\[\033[\$(parse_git_color)\]\$(parse_git_branch) \[\033[0m\]"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...