【问题标题】:bash prompt coloring for Mac OS XMac OS X 的 bash 提示着色
【发布时间】:2013-12-30 02:05:27
【问题描述】:

目标

我正在尝试使用 git 分支(如果可用)在 Mac OS X 上为我的 bash 提示着色。

我的尝试

凭借我有限的 bash 知识,我从 Google 搜索和其他问题中拼凑出以下代码:

function parse_git_branch() {
        branch=$(git rev-parse --abbrev-ref HEAD 2>/dev/null)

        if [[ -z "$branch" ]]; then
                return
        fi

        if [[ -z "$(git status -s 2>/dev/null)" ]]; then
                color=$'\e[1;32m'
        else
                color=$'\e[1;31m'
        fi

        echo "\[$color\] (${branch}) "
}

PS1="\h:\W \u\$(parse_git_branch)\[\e[0m\]\$ "

问题

虽然着色有效,但提示包含来自parse_git_branch 的一些转义序列。

leonidas:AYI jason\[\] (master) $

此外,命令历史记录 (up) 和递归搜索 (ctrl+r) 会产生额外的字符。

leonidas:AYI jason\[\] (master) $h)`re': git status

问题

  1. 如何使用适当的可见和不可见字符修复转义。
  2. 我是否应该使用 tput 而不是这些颜色代码以获得更广泛的支持?

【问题讨论】:

  • (1) 切换到zsh,(2) 得到oh-my-zsh,(3) choose a theme,(4) 永不回头!
  • @Oli Charlesworth,感谢您的建议。但我想解决当前的问题。
  • @Kevin,您能否提供更多信息 - 在哪里,为什么?
  • 当您设置PS1="...$(parse_git_branch)..." 时,它会在获取文件时精确评估一次。您需要 PS1='...' 每次都对其进行评估。
  • @Kevin,这不是我遇到的问题。每次都会对其进行评估。

标签: macos git bash command-prompt


【解决方案1】:

为什么要这么麻烦。只需创建一个.bash_profile 我的是:-

export PS1="\[\033[0;30;33m\]\w\[\e[0m\]$ "

你应该设置.bashrc来引用这个

[ -r ~/.bash_profile ] && source ~/.bash_profile

【讨论】:

  • 查看我的更新,我正在尝试包含 git 分支(如果可用)。
【解决方案2】:

问题是\[ \] 在扩展数据中不受尊重。

要解决这个问题,您可以在PROMPT_COMMAND 中将 PS1 设置为自身的扩展后版本,在每次提示之前评估其内容:

PROMPT_COMMAND='PS1="\h:\W \u$(parse_git_branch)\[\e[0m\]\\\$ "'

由于\[ \] 现在是 PS1 的文字值的一部分,而不是通过提示扩展创建的,因此它们被正确解释。

【讨论】:

  • 是的。更简单的例子:ps1() { echo '\h:\W$ '; }; PS1='$(ps1)'; 你的提示字面意思是\h:\W$
  • 虽然我会尝试这个,但对我来说感觉 hackish。一定有办法修复我所拥有的。
猜你喜欢
  • 1970-01-01
  • 2012-08-03
  • 2016-01-02
  • 2010-09-23
  • 2010-09-11
  • 2011-04-08
  • 2015-09-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多