终端提示的基本bash脚本

时间:2012-02-17 19:51:24

标签: bash shell terminal

目前我的终端提示包含git信息。

示例清理目录:michaelespinosa:〜/ Sites / example.com [git:master]
示例脏目录:michaelespinosa:〜/ Sites / example.com [git:master *]

我还要为git信息着色(如果它是干净的则为绿色,如果它是脏的则为红色)。

我以为我可以添加一个函数(parse_git_color),并根据是否存在星号,使用if else语句相应地设置它的颜色。

问题是它为clean和dirty目录保持返回绿色。我认为这个问题与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 个答案:

答案 0 :(得分:3)

请注意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\]"