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 um comando errado (que verificarei com $?
, embora não seja exatamente o mesmo).
No momento, o 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 recebo um status de saída diferente de zero. Posso executar o comando PROMPT_COMMAND
após um comando com falha, como aasdjfasdf
e echo $counter
mostrará um 0
(na verdade, um 1
, já que PROMPT_COMMAND o incrementa imediatamente).
Meu outro problema menor é que, no diretório raiz, meu prompt será exibido
(use@///)[11]$
que é menos do que ideal (os 3 /'s). Também não tenho certeza de como consertar isso, mas pelo menos não é um grande problema.
Como obtenho o PROMPT_COMMAND para incrementar e redefinir corretamente o contador?
edit : Aqui está o meu PS1 que faz tudo que eu quero, caso outros estejam curiosos:
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]\\$ '
Altere PROMPT_COMMAND para:
Use aspas simples para evitar expansão prematura de
$?
e use atribuição direta para o valor incrementado decounter
.