我PS1
在我的~/.bash_profile
:
export PS1="\\n\[\033[38;5;246m\]\u@\[\033[38;5;245m\]\h\[\033[38;5;15m\] \[\033[38;5;28m\]\w\[\033[38;5;15m\]\[\033[38;5;2m\]`__git_ps1`\[\033[38;5;15m\] \[\033[38;5;90m\]\t\[\033[38;5;15m\] \[\033[38;5;232m\]\[\033[38;5;15m\] \n\[\033[38;5;0m\]\\$ "
Run Code Online (Sandbox Code Playgroud)
(抱歉,我的颜色代码没有任何别名,我使用在线编辑器创建了此提示)
但是如果我切换,显示的当前分支总是错误的
我不确定为什么会发生这种情况。如果我自己运行命令,我会得到正确的值。
$ echo `__git_ps1`
(dev)
Run Code Online (Sandbox Code Playgroud)
如果我获取 .bash_profile ,新值就会出现(但下次我切换时会出错)。难道我做错了什么?
Run Code Online (Sandbox Code Playgroud)export PS1="…`__git_ps1`…"
使用`__git_ps1`
双引号,此命令运行命令__git_ps1
并将其输出(和其他周围文本)分配给变量PS1
。因此,您的提示显示了.bash_profile
在执行时确定的分支。
__git_ps1
每次 bash 显示提示时,您都需要运行。(实际上,在 git 信息更改之前,您不需要再次运行它,但这很难检测到。)有两种方法可以做到这一点。
`__git_ps1`
在PS1
变量中包含文字文本。确保将 bash 配置为对提示字符串执行 shell 扩展,并打开该promptvars
选项;默认情况下就是这种情况,但可以使用shopt -u promptvars
.
PS1='\n\[…\]$(__git_ps1)\[…\]\$ '
Run Code Online (Sandbox Code Playgroud)通过从PROMPT_COMMAND
变量运行的命令更新提示内容。
update_PS1 () {
PS1="\\n\\[…\\]$(__git_ps1)\[…\]\\$ "
}
shopt -u promptvars
PROMPT_COMMAND=update_PS1
Run Code Online (Sandbox Code Playgroud)顺便说一下,提示是一个 shell 配置,而不是一个全局设置,所以你应该在 中设置它~/.bashrc
,而不是在~/.bash_profile
.
小智 5
这只是一个简单的引用问题。更改`__git_ps1`
为\$(__git_ps1)
, 或者,如果您必须使用反引号:\`__git_ps1\`
。
为了说服自己,只需将您的 PS1 更改为(如果您想完全恢复到以前的设置,请打开一个新的 shell 实例):
$ PS1="$(date) >"
Thu Nov 26 20:02:34 EST 2015 >_
Run Code Online (Sandbox Code Playgroud)
唯一的问题是它不会更新(等待几秒钟按回车键)。
但这将:
$ PS1="\$(date) >"
Thu Nov 26 20:06:20 EST 2015
Thu Nov 26 20:06:25 EST 2015
Run Code Online (Sandbox Code Playgroud)
就这样。写exit
。(更新您的提示)回去工作。