ZSH:提示扩展返回码大于

问题描述

(理论上)问题很简单。我想要的只是在zsh提示符下显示小于或等于128的返回码,而大于128则显示相应的信号。我找不到执行此操作的任何示例,zsh docs仅指定如何去做

如果最后一条命令的退出状态为 n

以下是我唯一可以使用的版本(仅适用于SIGINT):

PROMPT='%130(?.[$(kill -l $?)].$?)> '

我也尝试过使用precmd,但完全失败了(看来zsh执行函数时返回代码受到干扰,但在那儿没有引用我。)

解决方法

解决方案确实很简单,只涉及创建一个不同的函数(我将返回代码传递给该函数),而不是使用precmd。以下是我的zsh提示的最终版本,包括返回代码/信号行为:

code () {
  if (( $1 > 128 )); then
    echo "SIG$(kill -l $1)"
  else
    echo $1
  fi
}
setopt promptsubst
PROMPT='%F{green}%n%f@%m %F{cyan}%~%f> '
RPROMPT='%(?..%F{red}[$(code $?)]%f'