2

首先,我知道已经回答了类似的问题,其中一些甚至被标记为重复。我已经阅读了他们的答案,虽然他们给了我一些关于我的问题的见解,但我仍然无法弄清楚如何修复我的 PS1。我也尝试阅读一些关于UNIX 引号的内容,但这也没有解决我的问题。

现在,进入实际问题:我已经有一段时间定制了 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 分支添加到其中,并在网络上找到了一些解决方案。其中一个真的引起了我的兴趣,因为它会根据我的工作目录是否脏而改变分支名称的颜色。然后我开始尝试使其适应我当前现有的自定义,目前它看起来像这样:

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 小时里一直在尝试摆弄它,得到每次都有不同的结果,但其中大多数是转义格式的标签打印混乱。

再说一次,我知道这与之前已经被问过和回答过的东西有些相关,但给出的答案不足以让我解决这个问题,所以我为“再次”提问而道歉。感谢您的帮助,好人!:)

4

1 回答 1

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"
于 2016-01-15T17:57:33.203 回答