【问题标题】:Why doesn't my bash prompt update?为什么我的 bash 没有提示更新?
【发布时间】:2011-03-21 15:40:15
【问题描述】:

我是 git 新手,我正在尝试将当前的 git 分支添加到我已经存在的提示符中,其定义如下:

RESET="\[\017\]"
NORMAL="\[\033[0m\]"
RED="\[\033[31;1m\]"
YELLOW="\[\033[33;1m\]"
WHITE="\[\033[37;1m\]"
SMILEY="${WHITE}:)${NORMAL}"
FROWNY="${RED}:(${NORMAL}"
SELECT="if [ \$? = 0 ]; then echo \"${SMILEY}\"; else echo \"${FROWNY}\"; fi"

export PS1="${RESET}${YELLOW}\u@\h${NORMAL} \`${SELECT}\` ${YELLOW}\w $(__git_ps1) >${NORMAL} "

我试过了(通过再次获取我的.bashrc 文件),它似乎工作,但后来我去了另一个分支,它没有更新。如何确保$(__git_ps1) 未被缓存?

【问题讨论】:

  • 我喜欢在提示符中添加 :):( 的想法,具体取决于最后一个命令是否失败 :)
  • @Mark Longair:我在这里找到它:serverfault.com/questions/4889/… BTW,你为什么要删除你的解决方案,它也有效!
  • 它比其他两个晚了几分钟,而且不如@geekosaur 整洁
  • 非常感谢您提出这个确切的问题(当然,也感谢 geekosaur 的回答)!我一直在四处寻找 HOURS 试图弄清楚为什么我的提示只是在我获取 .bashrc 文件时更新它的 git 状态行。

标签: git bash ps1


【解决方案1】:

$ 上需要一个反斜杠,因此它不会立即展开。 (与`...` 相比,$(...) 的写法不同。)

export PS1="${RESET}${YELLOW}\u@\h${NORMAL} \`${SELECT}\` ${YELLOW}\w \$(__git_ps1) >${NORMAL} "

我同意@MikeSep 关于使用单引号的观点,但实际上让颜色等被立即替换更为理想。没必要,稍微好点。也就是说,如果您使用单引号, 更容易理解发生了什么。

【讨论】:

  • 另外,如果您曾经直接在终端程序以外的地方工作(Emacs/Vim 命令缓冲区、screen 等),您可能需要考虑使用tput 而不是hard-编码颜色转义。
  • 在这种情况下,有必要替换颜色变量,我认为 - 至少,我只是根据@MikeSep 的建议获得了转义码,而您的则可以正常工作。 (+1)
  • @Mark:这很有趣; ${SELECT} 表明正在进行递归评估。也许它只是为了命令?我通常使用 PS1 函数,因为它更容易弄清楚发生了什么。
  • 谢谢@geekosaur
  • 哥们,你是个救命恩人。不过我有一个问题:我有一个 MBP 和一个 iMac。相同的 .bash_profile,相同版本的 bash(通过自制软件安装)。在 MBP 上,如果我不在 $(__git_ps1) 前面添加 \,则不会对其进行评估。如果我在 iMac 上做同样的事情,即使没有 \.知道这是怎么发生的吗?
【解决方案2】:

您的PS1 字符串可能会在保存之前进行评估,但您确实希望每次收到命令提示符时都运行__git_ps1 命令。我建议您在 export PS1='${RESET}...' 行中使用单引号而不是双引号。

【讨论】:

  • 可能有效,但我在将所有系统转换为单引号时遇到问题,所以我会使用 geekosaur 的解决方案。但你也得到了我的支持。
  • 啊,是的。他的更好——我错过了当地的颜色变量。无论如何感谢您的投票。 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-03-21
  • 2011-10-10
  • 2018-03-13
  • 2016-07-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多