zsh pipelinestatus 在以下提示中消失

zsh pipelinestatus 在以下提示中消失

我使用的是 zsh 5.8 (arm-apple-darwin20.2.0)。与 bash 中的方式不同, zsh 中的管道PIPESTATUS在下一个 shell 提示符下可以读取,而pipestatuszsh 中的管道似乎在接下来的提示符下消失了。

❯ true | false | true ; echo $pipestatus
0 1 0

❯ true | false | true
❯ echo $pipestatus
0

这种行为与答案中建议的行为不同这里,并且 zsh 文档没有提及任何与此相关的内容。

答案1

作为穆鲁在评论中写道,某些东西正在使用管道pipestatus,因此可能会在与提示相关的自动化中覆盖。最有可能的罪魁祸首是钩子函数例如precmdpreexec1。

Bash 保存$?PIPESTATUS以及一堆围绕陷阱的其他东西和PROMPT_COMMANDsave_parser_state)。 Zsh$?在许多情况下(在来源,寻找保存的地方lastval),包括扩展提示(promptexpand) 和运行钩子,例如precmdpreexec(callhookfunc来电doshfuncnoreturnval=1),但它永远不会保存pipestatus.

¹提示中的代码还可以设置变量,如果prompt_subst已设置,但子 shell 中会有一个管道,并且不会覆盖原始 shell 的pipestatus.

相关内容