如何在 PROMPT_COMMAND 执行期间检查 PIPESTATUS 等效项?

Jac*_*era 1 linux shell bash prompt

$PROMPT_COMMAND在 bash 中有一个自定义记录最后执行的命令及其返回代码。我很高兴地使用$?后者,直到我意识到对于管道命令来说这是不够的。我想我应该记录${PIPESTATUS[@]}一下。

不幸的$PIPESTATUS是似乎是在调用之后$PROMPT_COMMAND设置的。在执行期间我可以使用任何技巧$PROMPT_COMMAND来访问此信息吗?

mr.*_*tic 5

提示命令中的命令功能会在提示命令之后更改PIPESTATUSbash保存和恢复PIPESTATUS(以及),请参阅此处的预期行为的描述$?

诀窍是将$PIPESTATUS[]( 和/或$?) 保存在函数的第一个语句中,然后覆盖原始值。

function myprompt() {
   _pipestatus=( "${PIPESTATUS[@]}" )
   echo "current: ${PIPESTATUS[@]}"
   echo "cached : ${_pipestatus[@]}"
}

PROMPT_COMMAND=myprompt
Run Code Online (Sandbox Code Playgroud)

然后:

$ true | false | true
current: 0
cached : 0 1 0
Run Code Online (Sandbox Code Playgroud)

我做了与您所描述的类似的操作,但在陷阱处理程序函数中ERR而不是提示命令中。