如何使此脚本反映PS1上的分支状态?

时间:2016-01-15 17:09:05

标签: git bash ps1

首先,我知道similar questions have been answered,其中一些甚至是marked as duplicate。我已经阅读了他们的答案,虽然他们给了我一些关于我的问题的见解,但我仍然无法弄清楚如何修复我的PS1。我也尝试过阅读UNIX quotes,但这也没有解决我的问题。

现在,进入实际问题:我现在已经有了一段时间的自定义PS1,它总是工作得很好。就是这个:

SEPARATOR="$WHITEBOLD-"
USER_AND_DOMAIN="$GREENBOLD[$GRAY\u$WHITEBOLD@$GRAY\h$GREENBOLD]"
WORKING_DIR="$GREENBOLD[$YELLOW\w$GREENBOLD]"

export PS1="$USER_AND_DOMAIN$SEPARATOR$WORKING_DIR $WHITEBOLD\t\n$RED>$WHITE "

但是,我觉得有必要将我当前的git分支添加到其中,并在Web中找到了几个解决方案。 One of them really caught my interest,因为它会根据我的工作目录是否脏而改变分支名称的颜色。然后我开始尝试使其适应我当前现有的自定义,目前它看起来像这样:

SEPARATOR="$WHITEBOLD-"
USER_AND_DOMAIN="$GREENBOLD[$GRAY\u$WHITEBOLD@$GRAY\h$GREENBOLD]"
WORKING_DIR="$GREENBOLD[$YELLOW\w$GREENBOLD]"

GIT_BRANCH="$(git branch &>/dev/null;\
if [ $? -eq 0 ]; then \
  echo "$(echo `git status` | grep 'not staged for commit' > /dev/null 2>&1; \
  if [ "$?" -eq "0" ]; then \
    # Changes to working tree
    echo "$SEPARATOR$GREENBOLD[$RED\$(__git_ps1 "%s")$GREENBOLD]"; \    
  else \
    # Clean repository - nothing to commit
    echo "$SEPARATOR$GREENBOLD[$GREEN\$(__git_ps1 "%s")$GREENBOLD]"; \
  fi)"; \
fi)"

export PS1="$USER_AND_DOMAIN$SEPARATOR$WORKING_DIR$GIT_BRANCH $WHITEBOLD\t\n$RED>$WHITE "

但是,虽然它在我导航到另一个分支时确实更改了分支名称,但分支颜色不会自动更改 - 只有在我重新获取脚本时才会这样做(它是独立的手动在~/.ps1_setup下的脚本,在~/.bashrc内调用。通过我所读到的,它与单引号和双引号的使用有关,但我见过的大多数例子都比这个代码简单得多,而且我一直试图在最后2小时使用它,得到它每次都有不同的结果,但大多数都是以转义格式混淆了标签的打印件。

同样,我知道这与之前被问及回答的内容有些相关,但我给出的答案还不足以解决这个问题,所以我很抱歉再次'问'。谢谢你的帮助,好伙计们! :)

1 个答案:

答案 0 :(得分:2)

我不是bash专家,但我认为问题在于你将原来的单引号切换为双引号,bash处理这些单引号:双引号执行变量&命令替换,而单引号则没有。

请改为尝试:

export PS1="$USER_AND_DOMAIN$SEPARATOR$WORKING_DIR"'$(git branch &>/dev/null;\
if [ $? -eq 0 ]; then \
  echo "$(echo `git status` | grep "nothing to commit" > /dev/null 2>&1; \
  if [ "$?" -eq "0" ]; then \
    # @4 - Clean repository - nothing to commit
     echo "'$SEPARATOR$GREENBOLD[$GREEN'"$(__git_ps1 "%s"); \
  else \
    # @5 - Changes to working tree
     echo "'$SEPARATOR$GREENBOLD[$RED'"$(__git_ps1 "%s"); \
  fi)"; \
fi)'"$GREENBOLD] $WHITEBOLD\t\n$RED>$WHITE"