如何清空$的值? .bashrc 中的变量?
How to empty the value of $? variable in .bashrc?
我一直在尝试自定义 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
中清空$?
的值?
如果在使用 $ 后将 "invoke" /bin/true
作为函数的一部分会怎样?值,应该始终将其设置为 0
知道了。首先,归功于它应得的地方——提到的 "Detect Empty Command" 问题中的 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 的代码始终显示 return 代码,包括 0。我添加了条件位以在 return 代码为 0 时取消设置。
总之,给你了。
注意:我没有 git-prompt.sh
包含的任何内容,所以我在没有那个位的情况下进行了测试。希望这不会彻底改变任何事情。
我一直在尝试自定义 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
中清空$?
的值?
如果在使用 $ 后将 "invoke" /bin/true
作为函数的一部分会怎样?值,应该始终将其设置为 0
知道了。首先,归功于它应得的地方——提到的 "Detect Empty Command" 问题中的 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 的代码始终显示 return 代码,包括 0。我添加了条件位以在 return 代码为 0 时取消设置。
总之,给你了。
注意:我没有 git-prompt.sh
包含的任何内容,所以我在没有那个位的情况下进行了测试。希望这不会彻底改变任何事情。