提示命令中的命令功能会在提示命令之后更改PIPESTATUS、bash保存和恢复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而不是提示命令中。