Exibir status de retorno não zero em PS1

6

Eu quero incluir o status de retorno no meu prompt. (Fácil adicionar '$? ' , certo?)

No entanto, quero apenas que o status retornado (e o espaço à direita) seja diferente de zero.

Exemplo:

sd ~ $ false
1 sd ~ $ true
sd ~ $ 
    
por Steven 28.10.2011 / 22:28

3 respostas

4

Certifique-se de que a opção promptvars esteja ativada (por padrão). Em seguida, insira o código desejado em PROMPT_COMMAND para definir uma variável contendo exatamente o que você deseja no prompt.

PROMPT_COMMAND='prompt_status="$? "; if [[ $prompt_status == "0 " ]]; then prompt_status=; fi'
PS1='$prompt_status\h \w \$ '

No zsh, você pode usar sua construção condicional em PS1 (bash não tem equivalente).

PS1='%(?,,%? )%m %~ %# '
    
por 29.10.2011 / 15:35
3

O melhor que posso ter é obtido por

PS1='${?/#0/}'":$PS1"

onde adicionei um : como separador, portanto, não exatamente o que está na pergunta.

    
por 28.10.2011 / 22:46
2

Não é necessário usar PROMPT_COMMAND . Aqui ele faz complicações desnecessárias. Tudo o que você precisa fazer é definir essa função:

prompt_status()
{
    [ $? = 0 ] && return
    echo -n "${?} "
}

Em seguida, defina PS1 assim:

shopt -s promptvars
PS1='$(prompt_status)'$PS1

A avaliação da% subcamada prompt_status() protege $? de ser alterada.

    
por 30.03.2015 / 12:06

Tags