【问题标题】:Mac OSX | Bash .bash_profile not updating PS1Mac OSX | Bash .bash_profile 不更新 PS1
【发布时间】:2015-05-14 00:30:33
【问题描述】:

我有一个名为 .bash_prompt 的小脚本,由 ~/.bash_profile 中的source ~/.bash_prompt 调用。

该脚本将我的 PS1 设置为显示有关当前 git 存储库的一些有用信息。 不幸的是,git-part 仅在生成新终端时执行,因此仅当我更改为 git repo 后手动调用脚本时才会显示分支。

如何在每次执行命令时更新我的​​ bash 提示符?

function git_branch() {
    local GITDIR=$(git rev-parse --show-toplevel 2>&1)
    if [[ "$GITDIR" != '/Users/\u' ]]
    then
        local BRANCH=`git branch 2> /dev/null | sed -n '/^\*/s/^\* //p'`
      if [ -n "$BRANCH" ]; then
          echo -e "$BRANCH"
      fi
    else
     echo ""
    fi
}

function git_prompt() {
    local prompt_unpushed_symbol="△"
    local prompt_unpulled_symbol="▽"
    local prompt_dirty_symbol="*"
    local prompt_synced_symbol="✓"

    local local_branch=$(git_branch)
    local remote_branch="origin/$local_branch"
    local first_log="$(git log $local_branch $remote_branch -1 2> /dev/null)"

    local STATUS=`git status 2>&1`
    if [[ "$STATUS" == *'Not a git repository'* ]]; then
        echo ""
    elif [[ "$STATUS" != *'working directory clean'* ]]; then
        echo "[$local_branch $prompt_dirty_symbol]"
    elif [[ "$STATUS" == *'Your branch is ahead'* ]]; then
        echo "[$local_branch $prompt_unpushed_symbol]"
    elif [[ -n "$first_log" ]]; then
        echo "[$local_branch $prompt_unpulled_symbol]"
    else
        echo "[$local_branch $prompt_synced_symbol]"
    fi
}

function colorPrompt {
    local c_brace="\[\033[m\]"
    local c_git="\[\033[31m\]"

    local user_host="\[\033[36m\]\u\[\033[m\]@\[\033[32m\]\h"
    local location="\[\033[33;1m\]\w"
    local tail="\n\$ "

    export PS1="[$user_host $location$c_brace]$c_git$(git_prompt)$c_brace$tail"
}

colorPrompt

【问题讨论】:

  • 运行declare -p PS1(或echo "$PS1",如果declare -p由于某种原因在OS X上不起作用)并查看PS1的值,看看这是否有助于你理解它的原因不更新。

标签: macos git bash ps1


【解决方案1】:

PROMPT_COMMAND shell 变量的值在显示提示之前执行;此功能的主要用途之一是设置PS1 的值。在你的情况下,你需要做的就是添加

PROMPT_COMMAND=color_prompt

在采购.bash_prompt 后发送给您的.bash_profile

【讨论】:

  • 在哪里定义了color_prompt,它对PS1 的使用有何影响?
  • color_prompt 是 OP 在他的问题中定义的函数。
猜你喜欢
  • 2015-01-17
  • 1970-01-01
  • 2012-07-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-08-04
  • 2017-04-14
  • 1970-01-01
相关资源
最近更新 更多