【发布时间】:2015-04-15 23:57:16
【问题描述】:
我一直在尝试自定义我的 bash 提示,使其看起来像
┌─[error_code_if_not_zero]─[time_short]─[username]─[current_folder]─[git_branch]
└─▪
这是我的.bashrc:
# command completion
source /home/falcon/.bin/git-prompt.sh
GIT_PS1_SHOWDIRTYSTATE=1
GIT_PS1_SHOWSTASHSTATE=1
GIT_PS1_SHOWUNTRACKEDFILES=1
GIT_PS1_SHOWUPSTREAM="auto"
# function to generate the prompt
function __prompt_command() {
__exit_code="$?"
__error_int="";
if [ $__exit_code -ne 0 ]; then
__error_int="[\[\e[0;31m\]$__exit_code\[\e[0;37m\]]─"
fi
PS1="\[\e[0;37m\]┌─$__error_int[\A]─[\[\e[0;35m\]\u\[\e[0;37m\]]─[\[\e[0;33m\]\w\[\e[0;37m\]]\$(__git_ps1 '─[\[\e[0;31m\]%s\[\e[0;37m\]]')\n\[\e[0;37m\]└─▪ \[\e[0;m\]"
}
export PROMPT_COMMAND=__prompt_command
此配置工作正常,它在非零时显示错误代码。但是问题来了,我只是在终端中按下enter(调用空命令)——返回值与最后一个非空命令的返回值相同。例如,当我在终端中按enter 时发生这种情况:
┌─[127]─[02:51]─[falcon]─[~]
└─▪
┌─[127]─[02:51]─[falcon]─[~]
└─▪
┌─[127]─[02:51]─[falcon]─[~]
└─▪
┌─[127]─[02:51]─[falcon]─[~]
└─▪
如您所见,error code 127 即使在一个空命令之后仍然存在。
但我期待这样的事情:
┌─[127]─[02:51]─[falcon]─[~]
└─▪
┌─[02:51]─[falcon]─[~]
└─▪
┌─[02:51]─[falcon]─[~]
└─▪
┌─[02:51]─[falcon]─[~]
└─▪
那么,我的问题是,如何在函数__prompt_command 中清空$? 的值?
【问题讨论】:
-
好吧,我已经花了很长时间看这个,但没有解决方案。问题在于范围——在标记的“可能重复”中,在 users 环境中设置了一个变量,因此它仍然存在。在上面的问题中,PS1 设置在 function 中,每次需要提示时都会运行该函数。由于对函数的调用没有变量持续存在,因此我能想到的唯一解决方案涉及临时文件,这是不切实际的。 :(