Comandos na sua função de comando de prompt alter PIPESTATUS , bash salva e restaura PIPESTATUS (e $? ) após o comando de prompt, consulte a descrição do comportamento pretendido aqui .
O truque é salvar $PIPESTATUS[] (e / ou $? ) na primeira instrução da sua função, depois disso os valores originais são sobrescritos.
function myprompt() {
_pipestatus=( "${PIPESTATUS[@]}" )
echo "current: ${PIPESTATUS[@]}"
echo "cached : ${_pipestatus[@]}"
}
PROMPT_COMMAND=myprompt
então:
$ true | false | true
current: 0
cached : 0 1 0
Eu faço algo semelhante ao que você descreveu, mas dentro de uma função de manipulador de traps para ERR em vez de um comando prompt.