【发布时间】:2013-05-18 21:10:33
【问题描述】:
我一直在尝试自定义我的 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 $?)。这是正在发生的事情吗?还是我的提示有其他问题?很长的问题,如何提示我使用最后一个退出代码?
【问题讨论】:
-
我也从来没有成功过这样的事情;然而,我所做的是将 ${?#0} 放入提示符中,当且仅当它不为零时,它才会打印数字退出状态。
-
它按原样工作。你只是把绿色和红色颠倒了。
-
prompt.gem 的无耻插件,它提供了一个可扩展的提示,包括退出代码和前一个命令的持续时间。
-
Re:“在运行
.bashrc时评估一次”——这意味着您在分配给PS1时在其周围加上了错误的引号。必须是单的,而不是双的。如果这没有帮助,那么您将通过在打印提示之前运行的其他东西重置$?;set -x将启用跟踪此类命令。 -
@CharlesDuffy 感谢您的提示!我会记住的。