Cria um bash PS1 que conta a sequência de comandos 'corretos'

0

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]\$ '
    
por jeremysprofile 30.03.2018 / 02:37

1 resposta

1

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 .

    
por 30.03.2018 / 02:39

Tags