Como redefinir o terminal antes da execução do comando?

5

Estive procurando apimentar minha experiência no Terminal, entre outras coisas, adicionando um pouco de cor. Eu usei o tputcomando para criar um prompt com boa aparência. Isso faz parte do meu .bash_profile:

BLACK=$(tput setaf 0)
RED=$(tput setaf 1)
GREEN=$(tput setaf 2)
YELLOW=$(tput setaf 3)
BLUE=$(tput setaf 4)
MAGENTA=$(tput setaf 5)
CYAN=$(tput setaf 6)
WHITE=$(tput setaf 7)
BOLD=$(tput bold)
REVERSE=$(tput rev)
RESET=$(tput sgr0)

export PS1="${WHITE}$(date "+%H:%M") ${MAGENTA}\u${WHITE}@${MAGENTA}$(scutil --get ComputerName)${WHITE}:${MAGENTA}\w\n${GREEN}\$ ${REVERSE}"

Observe o $ {REVERSE} (ou $(tput rev)) no final do prompt, o que destaca os comandos digitados adicionando uma cor de fundo.

insira a descrição da imagem aqui

Meu problema, no entanto, é que, ao executar qualquer comando, o estilo não é redefinido automaticamente ao pressionar enter, o que, neste caso, adiciona um fundo verde indesejado à saída do comando. Como posso redefinir o terminal antes da execução do comando?

insira a descrição da imagem aqui

Gerry
fonte

Respostas:

3

O que você está procurando no BASH é equivalente ao que está embutido precmdno ZSH. Essa função interna seria executada antes da execução de um comando. Uma solução alternativa é mencionada em https://superuser.com/questions/175799/does-bash-have-a-hook-that-is-run-before-executing-a-command . Espero que ele lhe dê uma dica de como resolver seu problema. A redefinição deve ser chamada dentro desta função.

ismail
fonte
Obrigado, isso me levou a acrescentar trap "tput sgr0" DEBUG, o que surpreendentemente parece funcionar.
Gerry
1

Experimente o resetcomando (disponível em /usr/bin/reset) ou tput reset.

A adição ${RESET}no final do prompt parece funcionar.

lhf
fonte
Ah, você deseja redefinir o terminal imediatamente antes da execução do comando, mas depois de digitar o comando. Eu não sei como fazer isso.
Lhf 10/08/12