shell 用于终端提示符的基本bash脚本

nr9pn0ug  于 11个月前  发布在  Shell
关注(0)|答案(1)|浏览(130)

目前我的终端提示符包含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)]/"
}

字符串
任何帮助都很感激!谢谢

wsewodh2

wsewodh21#

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

字符串

相关问题