Bash提示多命令替换
我正在使用以下(简化)函数在.bashrc中设置bash提示符:Bash提示多命令替换,bash,Bash,我正在使用以下(简化)函数在.bashrc中设置bash提示符: set_prompts() { PS1="\u@\h in \w " PS1+="\$(get_git_repo_details)" PS1+="\n" PS1+="\$(exit_status_prompt)" } 现在,根据$?的值是否为0,退出状态提示将打印不同颜色的提示字符 但是我注意到,对于上面的代码,提示字符的颜色永远不会更新。但是,如果我在附加get\u git\u repo\u
set_prompts() {
PS1="\u@\h in \w "
PS1+="\$(get_git_repo_details)"
PS1+="\n"
PS1+="\$(exit_status_prompt)"
}
现在,根据$?
的值是否为0,退出状态提示将打印不同颜色的提示字符
但是我注意到,对于上面的代码,提示字符的颜色永远不会更新。但是,如果我在附加get\u git\u repo\u details
的输出之前,将exit\u status\u prompt
的输出附加到$PS1
,或者根本不附加get\u git\u repo\u details
的输出,那么它会更新
有人知道这是什么原因吗?谢谢
编辑:
然后,
高亮显示
函数只使用tput
将第二个参数中的字符串与第一个参数中指定的颜色预先填充。在执行设置提示
中的任何其他操作之前,需要调用退出状态提示
,或者将重置$?
。大概,exit\u status\u prompt
使用最近执行的命令或分配的退出状态
我取消了命令替换,因为我假设您正在(并且应该)运行
set\u prompts
,作为PROMPT\u命令中的第一个命令,谢谢,切普纳。然而,这似乎并没有回答我的问题。我知道我可以使用PROMPT\u命令
,并使其轻松工作。然而,我不明白为什么,即使我在开始时设置了esp
,它也不会更新,除非我将PS1+=“$esp”
移到上面PS1+=“$(获取git\u repo\u详细信息)
。我不能准确回答这个问题,因为我不知道退出状态提示的样子。但是,每个命令都会更新$?
,我假设退出状态\u提示符
会查看$?
的当前值。在您的示例中,PS1+=“\n”
每次调用exit\u status\u prompt
之前都将值重置为0
。问题是,如果我移动PS1+=“\n”
和PS1+=“\$(exit\u status\u prompt)”
行,使它们位于PS1+=“$(获取git repo\u详细信息)
上方,则颜色会正确更改。我已更新问题以显示退出状态提示功能。
exit_status_prompt()
{
if [ $? -ne 0 ]
then
highlight 1 "❯ "
else
highlight 2 "❯ "
fi
}
set_prompts() {
esp=$(exit_status_prompt)
PS1="\u@\h in \w "
PS1+="$(get_git_repo_details)"
PS1+="\n"
PS1+="$esp"
}