Como verificar o equivalente PIPESTATUS durante a execução de PROMPT_COMMAND?

1

Eu tenho um $PROMPT_COMMAND personalizado no bash que registra o último comando executado e seu código de retorno. Eu estava usando $? para o último feliz até que percebi que para comandos canalizados isso era insuficiente. Eu pensei em logar ${PIPESTATUS[@]} .

Infelizmente $PIPESTATUS parece estar definido após a invocação do $PROMPT_COMMAND . Existe algum truque que eu possa usar para acessar essas informações durante a execução de $PROMPT_COMMAND ?

    
por Jacobo de Vera 22.10.2014 / 16:50

1 resposta

3

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.

    
por 22.10.2014 / 20:11