У меня есть следующее в моем .bash_profile, чтобы дать мне информацию о ветке git в моем приглашении bash:

# Configure colors, if available.
if [ -x /usr/bin/tput ] && tput setaf 1 >&/dev/null; then
  c_reset='\[\e[0m\]'
  c_user='\[\033[1;33m\]'
  c_path='\[\e[0;33m\]'
  c_git_clean='\[\e[0;36m\]'
  c_git_dirty='\[\e[0;35m\]'
else
  c_reset=
  c_user=
  c_path=
  c_git_clean=
  c_git_dirty=
fi

# Function to assemble the Git part of our prompt.
git_prompt ()
{
  if ! git rev-parse --git-dir > /dev/null 2>&1; then
    return 0
  fi

  git_branch=$(git branch 2>/dev/null| sed -n '/^\*/s/^\* //p')

  if git diff --quiet 2>/dev/null >&2; then
    git_color="$c_git_clean"
  else
    git_color="$c_git_dirty"
  fi

  echo " [$git_color$git_branch${c_reset}]"
}

# Thy holy prompt.
PROMPT_COMMAND='PS1="${c_user}\u${c_reset}@${c_user}\h${c_reset}:${c_path}\w${c_reset}$(git_prompt)\$ "'

Все отлично работает, кроме цветов. Если я удаляю оператор if вокруг определений цвета (и удаляю раздел else), тогда я получаю цвета.

Я новичок в bash, у меня мало понятия о том, что делает заявление if и почему оно не оценивается как истинное.

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

Я использую FreeBSD 9.0 и Bash 4.1.9(0)-релиз

1 ответ1

0

Согласно man- tput возвращает 1, если терминал имеет атрибут.

Поэтому я думаю, что проверка инвертирована.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .