我正在使用以下(简化)函数在.bashrc中设置我的bash提示符:
set_prompts() {
PS1="\u@\h in \w "
PS1+="\$(get_git_repo_details)"
PS1+="\n"
PS1+="\$(exit_status_prompt)"
}
现在,
exit_status_prompt
会打印不同颜色的提示字符,具体取决于$?
的值是否为0。然而,我注意到以上代码中,提示字符的颜色从未更新。但是,如果在将
get_git_repo_details
的输出附加到$PS1
之前,先将exit_status_prompt
的输出附加到$PS1
中,或者根本不附加get_git_repo_details
的输出,那么它就会更新。有人知道是什么原因吗?谢谢。
编辑:
exit_status_prompt()
{
if [ $? -ne 0 ]
then
highlight 1 "❯ "
else
highlight 2 "❯ "
fi
}
< p > highlight
函数使用tput
在第二个参数字符串前添加第一个参数指定的颜色。
PROMPT_COMMAND
并轻松地使它起作用。但是,即使我在开头设置了esp
,除非我将PS1 + =“$(get_git_repo_details)”
上面的PS1 +=“$ esp”
移动,否则它不会更新。 - Bruce Johnsonexit_status_prompt
是什么样子的。但是,每个命令都会更新$?
,我假设exit_status_prompt
查看$?
的当前值。在你的例子中,PS1+="\n"
每次在调用exit_status_prompt
之前将该值重置为0
。 - chepnerPS1 +="\n"
和PS1 += "\$(exit_status_prompt)"
这两行代码都移到PS1+="$(get_git_repo_details)"
上面,那么颜色会正确改变。我已经更新了问题以展示exit_status_prompt
函数。 - Bruce Johnson