lec*_*h95 11 zsh terminal exit-status
我想在 zsh 退出代码值中打印每个启动的命令。例如
$ cat file_not_present
cat: file_not_present: No such file or directory
Exit code 1
Run Code Online (Sandbox Code Playgroud)
我只知道我可以打印在终端中启动的最后一个命令的错误代码
$ echo $?
Run Code Online (Sandbox Code Playgroud)
我能怎么做?
Sté*_*las 11
就我个人而言,我添加%(?..%B(%?%)%b)
到 my $PROMPT
,以便上一个命令的退出状态在不成功的情况下以粗体显示在括号中,这比打印每个命令的退出状态更少干扰。
要打印每个失败命令的退出状态,您可以执行以下操作:
TRAPERR() print -u2 Exit status: $?
Run Code Online (Sandbox Code Playgroud)
$假;错误的; (123号出口) 退出状态:1 退出状态:1 退出状态:123 (123) $
((123)$
来自$PROMPT
上面提到的存在)。
对于每个命令:
TRAPDEBUG() print -u2 Exit status: $?
Run Code Online (Sandbox Code Playgroud)
但这可能会变得非常烦人。
您还可以打印最后运行的命令的退出状态:
print_last_status() print -u2 Exit status: $?
precmd_functions+=(print_last_status)
Run Code Online (Sandbox Code Playgroud)
$ false; (exit 123); true
Exit status: 0
Run Code Online (Sandbox Code Playgroud)
与该$PROMPT
方法一样,您只能看到在上一个提示符下发送的命令行中运行的最后一个命令的状态。
无论如何,在 stderr 上打印它(正如我上面使用 所做的那样-u2
)可能会比在 stdout 上打印它引起的问题更少。做起来print Exit status: $? > /dev/tty
可能会更好。
您可以将任何用户定义的函数添加到precmd_functions
:
print_status() echo $?
precmd_functions+=(print_status)
Run Code Online (Sandbox Code Playgroud)
它在每个提示之前执行,即在命令之后执行。