bash如果变量由函数设置

时间:2015-11-04 05:52:30

标签: bash git-bash .bash-profile

我对BASH的经验有限,我正在寻找有关如何继续的指导,请耐心等待。

我正在尝试更改命令提示符,当我在git repo中时,我可以使用我在谷歌上找到的这个post,但我也想根据当前的状态添加颜色repo(干净,未跟踪的文件,修改过的文件)。

目前我的.bashrc文件末尾有这个:

parse_git_branch () {
  git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/[\1]/'
}

modified () {
  git status 2> /dev/null | grep -q modified
}

untracked () {
  git status 2> /dev/null | grep -q Untracked
}

clean () {
  git status 2> /dev/null | grep -q clean
}

NO_COLOR="\[\033[0m\]"
GREEN="\[\033[0;32m\]"
YELLOW="\[\033[0;33m\]"
RED="\[\033[0;31m\]"

set_color () {

  if untracked ; then
    echo $RED
  elif modified ; then
    echo $YELLOW
  elif clean ; then
    echo $GREEN
  else
    echo $NO_COLOR
  fi
}

PS1="\u:\w\$(set_color)\$(parse_git_branch)$NO_COLOR> "

命令提示符会更改,但不会像我认为的那样更改颜色。

以下是我得到的内容:
外部git repo arod:~\[\033[0m\]>
在git仓库中 arod:~/tos\[\033[0;32m\][dev]>

我不确定如何评估我认为的颜色,只是寻找一些比我有更多BASH经验的人的指导。

1 个答案:

答案 0 :(得分:0)

如果有人在寻找答案;或至少我使用的解决方案:

parse_git_branch () {
  git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/[\1]/'
}

modified () {
  git status 2> /dev/null | grep -q modified
}

untracked () {
  git status 2> /dev/null | grep -q Untracked
}

clean () {
  git status 2> /dev/null | grep -q clean
}

NO_COLOR="\033[0m"
GREEN="\033[0;32m"
YELLOW="\033[0;33m"
RED="\033[0;31m"

set_color () {

  if untracked ; then
    echo -e $RED
  elif modified ; then
    echo -e $YELLOW
  elif clean ; then
    echo -e $GREEN
  else
    echo -e $NO_COLOR
  fi
}

PS1="\u:\w\$(set_color)\$(parse_git_branch)$NO_COLOR> "

问题中的代码和这个代码之间的主要区别在于我确实在echo中添加了-e标志,并从颜色变量中删除了\。' s。

希望这有助于某人

修改

收到更多反馈后,现在的情况如下:

parse_git_branch () {
  git branch 2> /dev/null | sed -e '/^[^*]/d' -e 's/* \(.*\)/[\1]/'
}

no_color="\033[0m"
green="\033[0;32m"
yellow="\033[0;33m"
red="\033[0;31m"

set_color () {

  case "$(git status 2> /dev/null)" in
    *Untracked*)
      printf '%b' "$red";;
    *modified*)
      printf '%b' "$yellow";;
    *clean*)
      printf '%b' "$green";;
    *)
      printf '%b' "$no_color";;
  esac

}

PS1="\u:\w\$(set_color)\$(parse_git_branch)$no_color> "

所有这些都来自@Charles Duffy 我没有采用的唯一方法是使用tput来获取颜色转义序列。