因此,我一直在尝试通过bash提示进行自定义,以使其看起来像
[feralin@localhost ~]$ _
颜色。我设法获得了恒定的颜色(每次看到提示时,颜色都是相同的),但是如果最后一个命令的退出状态为非零,我希望用户名(“ feralin”)显示为红色,而不是绿色。我想出了:
\e[1;33m[$(if [[ $? == 0 ]]; then echo "\e[0;31m"; else echo "\e[0;32m"; fi)\u\e[m@\e[1;34m\h \e[0;35m\W\e[1;33m]$ \e[m
但是,从我的观察来看,运行$(if ...; fi)时似乎只对一次求值.bashrc,然后永远替换结果。即使最后一个退出代码为非零(如),这也使名称始终为绿色echo $?。这是怎么回事吗?还是提示出现其他问题?长话短说, 如何提示我使用最后一个退出代码?
$(if ...; fi)
.bashrc
echo $?
当您开始在复杂的PS1上边框时,可以考虑使用PROMPT_COMMAND。 这样,您将其设置为一个函数,它将在每个命令之后运行以生成提示。
PROMPT_COMMAND
您可以尝试以下方法 ~/.bashrc
~/.bashrc
PROMPT_COMMAND=__prompt_command # Func to gen PS1 after CMDs __prompt_command() { local EXIT="$?" # This needs to be first PS1="" local RCol='\[\e[0m\]' local Red='\[\e[0;31m\]' local Gre='\[\e[0;32m\]' local BYel='\[\e[1;33m\]' local BBlu='\[\e[1;34m\]' local Pur='\[\e[0;35m\]' if [ $EXIT != 0 ]; then PS1+="${Red}\u${RCol}" # Add red if exit code non 0 else PS1+="${Gre}\u${RCol}" fi PS1+="${RCol}@${BBlu}\h ${Pur}\W${BYel}$ ${RCol}" }
这应该按照您想要的方式进行。如果要查看我使用函数执行的所有操作,请查看我的bashrc的子文件__prompt_command。
__prompt_command