Altere PROMPT_COMMAND para:
PROMPT_COMMAND='if [ $? -eq 0 ]; then counter=$((counter+1)); else counter=0; fi'
Use aspas simples para impedir a expansão prematura de $?
e use a atribuição direta para o valor incrementado de counter
.
Meu objetivo é ter um prompt bash que exiba um nome de usuário abreviado, um caminho abreviado em azul e uma variável de contador que seja redefinida toda vez que eu digitar errado um comando (que verificarei com $?
, embora isso não seja estritamente o mesmo).
Agora, meu ~/.bashrc
tem:
counter=0
#should increment counter if no errors, else reset counter
PROMPT_COMMAND="if [ $? -eq 0 ]; then ((counter++)); else counter=0; fi"
PS1='(${USER:0:3}@\[\e[0;34m\]$(basename $(dirname $PWD))/$(basename $PWD)\[\e[m\])[$counter]\$ '
Isso exibe:
(use@//home)[17]$
Meu principal problema é que o contador nunca é zerado quando obtenho um status de saída diferente de zero. Eu posso executar o comando em PROMPT_COMMAND
depois que um comando com falha, como aasdjfasdf
e echo $counter
, mostrar 0
(na verdade, 1
, pois PROMPT_COMMAND o incrementa imediatamente).
Meu outro problema menor é que no diretório raiz meu prompt será exibido
(use@///)[11]$
que é menos que ideal (os 3 / s). Eu não sei como consertar isso, mas pelo menos não é tão grande coisa.
Como obtenho o PROMPT_COMMAND para incrementar e redefinir corretamente o contador?
edit : Aqui está o meu PS1 que faz tudo o que eu quero, caso os outros tenham curiosidade:
counter=0
PROMPT_COMMAND='if [ $? -eq 0 ]; then ((counter++)); else counter=0; fi;'
PS1='(\[\e[4m\]${USER:0:3}\[\e[0m\]@\[\e[34m\]${PWD:${#PWD}<15?0:(-15)}\[\e[m\])[$counter]\$ '