Código de erro no prompt

0

Atualmente, tenho ! no prompt direito de como segue:

export RPS1="%B%F{red}!%f%b"

Como uso , e o histórico de comandos não está sendo sincronizado suas vidraças (infelizmente), os números são quase inúteis para mim.

Eu tentei definir RPS1 para ? e $? para exibir código de retorno / nível de erro do comando, mas sem sucesso.

Eu lembro que tinha que definir:

setopt promptbang

para ! ser interpolado (interpretado, expandido).

Como conseguir tal prompt no lado direito da linha de comando, indicando o resultado do comando anterior em número de erro.

Uma captura de tela de exemplo do meu prompt atual com > , >> e ! como $PS1 , $PS2 e $RPS1 .

    
por w17t 05.07.2017 / 19:44

2 respostas

1

Para mostrar o status de retorno do comando anterior, você pode usar o prompt escape %? .

RPS1='%B%F{red}%?%f%b'

Você pode até mudar a cor dependendo do status de saída:

RPS1='%B%(?.%F{green}.%F{red})%?%f%b'

Ou só exibe qualquer coisa, se o comando retornou com um erro:

RPS1='%(?..%?)'

Isso irá colorir a saída verde se %? for avaliado como 0 e vermelho caso contrário.

Para substituir parâmetros arbitrários (como $? ), você precisa ativar a opção PROMPT_SUBST :

setopt promptsubst

Nesse caso, você precisa citar o parâmetro para evitar que seja substituído no momento da declaração. Por exemplo, usando aspas simples ou citando $ com um \ entre aspas duplas.

RPS1='$?'
RPS1="\$?'

BTW: Não é necessário exportar RPS1 (ou qualquer outro parâmetro de configuração do shell) para que ele tenha efeito.

    
por 06.07.2017 / 13:18
1

Basta colocar ${?##0} em PS1 onde quer que um código de saída diferente de zero seja exibido. Se o código de saída do comando anterior for zero, ele será truncado para uma string nula ( 0 com todos os zeros à esquerda removidos é uma string nula).

user@host:~
$ bash
user@host:~
$ exit 4
logout
user@host:~ 4
$ 

Na parte relevante do meu PS1 , tenho \e[31m${?##0}\n\[\e[$(((($?>0))*31))m\] . Se o código de saída do comando anterior for diferente de zero, exiba-o em vermelho.

    
por 05.07.2017 / 20:01