答案1
为了显示上一个命令的返回状态,您可以使用迅速逃脱 %?
。
RPS1='%B%F{red}%?%f%b'
您甚至可以根据退出状态切换颜色:
RPS1='%B%(?.%F{green}.%F{red})%?%f%b'
或者,如果命令返回错误,则仅显示任何内容:
RPS1='%(?..%?)'
%?
如果计算结果为,则输出为绿色0
,否则为红色。
为了替换任意参数(例如$?
),您需要启用该PROMPT_SUBST
选项:
setopt promptsubst
在这种情况下,您需要充分引用参数以防止它在声明时被替换。例如,使用单引号或使用$
内部\
双引号进行引用。
RPS1='$?'
RPS1="\$?'
顺便说一句:无需导出RPS1
(或任何其他 shell 配置参数)即可使其生效。
答案2
只需将其放入${?##0}
您PS1
想要显示非零退出代码的位置即可。如果前一个命令的退出代码为零,它将被截断为空字符串(0
删除所有前导零就是空字符串)。
user@host:~
$ bash
user@host:~
$ exit 4
logout
user@host:~ 4
$
在我的相关部分中PS1
,我有\e[31m${?##0}\n\[\e[$(((($?>0))*31))m\]
。如果上一个命令的退出代码非零,则将其显示为红色。