Bash shell prompt: onde está $ RET?

0

Eu estava lendo este link e terminou com o seguinte:

# Stores the status of each command in $RET
PROMPT_COMMAND='RET=$?;'

# A colour.
RED_SHELL='\e[0;36m'

# Prints "Status 1" if RET is 1, for example.
RET_VISUALISE='$(if [[ $RET != 0 ]]; then echo -ne "Status \[$RED_SHELL\]$RET\n" && RET=0; fi;)'

# What to print for each prompt.
PS1="$RET_VISUALISE\[\e]0;\w\a\]\n\[\e[32m\]\u@\h \t \[\e[33m\]\w\[\e[0m\]\n\$ "

Isso faz quase o que eu quero, exceto quando eu pressiono Enter, Enter, Enter várias vezes depois de um comando que retornou status! = 0. Nesse caso, ele imprime "Status 1" toda vez que eu pressiono Enter.

Isso é o que a parte && RET=0; deveria se livrar.

Além disso, não entendo por que env | grep RET mostra apenas o conteúdo PS1 . Qual é o escopo de $RET ?

    
por Evgeni Sergeev 23.06.2012 / 06:35

1 resposta

0

Você está substituindo seu RET=0 por RET=$? quando o próximo prompt for impresso sem ter executado um comando no meio. $? retorna o valor de retorno do último comando executado e ainda é 1 .

Bash permite que você capture erros em comandos executados e execute código em resposta a isso (uma vez):

function err_handle {
    RET=$?
    if [[ $RET != 0 ]]; then
        echo -ne "Status $RED_SHELL$RET\n"
    fi
}
trap 'err_handle' ERR
    
por 23.06.2012 / 10:22

Tags