如何清空$的值? .bashrc中的变量?

时间:2015-04-15 23:57:16

标签: bash ps1

我一直在尝试自定义 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的值?

2 个答案:

答案 0 :(得分:1)

如果你在使用$之后“调用”/bin/true作为函数的一部分怎么办?值,应始终将其设置为0

答案 1 :(得分:1)

知道了。首先,归功于它所应有的 - anubhava在提到的"检测空命令"问题是这段代码的大部分内容的作者。

尽管如此,它仍然按照你想要的方式工作(据我所知)。

# 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
PS1="\[\e[0;37m\]┌─\$([[ -n \$_ret ]] && echo \"[\[\e[0;31m\]\$_ret\[\e[0;37m\]]-\")[\A]─[\[\e[0;32m\]\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\]"
trapDbg() {
   local c="$BASH_COMMAND"
   [[ "$c" != "pc" ]] && export _cmd="$c"
}

pc() {
   local r=$?
   if [[ $r == 0 ]]; then
      r=''
   fi
   trap "" DEBUG
   [[ -n "$_cmd" ]] && _ret="$r" || _ret=""
   export _ret
   export _cmd=
   trap 'trapDbg' DEBUG
}

export PROMPT_COMMAND=pc
trap 'trapDbg' DEBUG

我将你的代码和他的代码结合起来,并修改了PS1。它现在包含仅在设置$_ret时显示方括号的逻辑。此外,anubhava的代码总是显示一个返回码,包括0.我在返回码为0时添加了条件位以取消设置。

无论如何,你有它。

注意:我没有git-prompt.sh包含的内容,所以我在没有这一点的情况下进行了测试。希望这并没有彻底改变任何事情。