显示上一个命令退出代码时自定义zsh的提示

uno*_*ode 36 zsh exit-code

Zsh包括使用%?转义序列在提示中显示上一个命令的返回码/退出代码的功能.

不过我想提出以下提示:

user@host ~ [%?] %
Run Code Online (Sandbox Code Playgroud)

当退出代码与0不同时:

user@host ~ %
Run Code Online (Sandbox Code Playgroud)

退出代码为0时.

如果我%?单独使用它总是显示,即使%?是0.此外我想要方括号但仅当退出代码不是0时.

最简单的方法是什么?

Pau*_*ce. 54

将其添加到PS1您希望显示退出代码的位置:

%(?..[%?] )
Run Code Online (Sandbox Code Playgroud)

这是一个条件表达式.如果第一个点之前的表达式为真,则输出两个点之间的部分(在这种情况下不是).如果它是假的,则输出第二个点之后的部分.

例如:

PS1='%n%m %~ %(?..[%?] )%# '
Run Code Online (Sandbox Code Playgroud)


sak*_*ki7 13

或者,您可以:

setopt PRINT_EXIT_VALUE
Run Code Online (Sandbox Code Playgroud)

始终打印显示上一个返回值的换行符.

我不喜欢将它用于普通用途,但它通常适用于调试shell脚本.