Como faço para parar uma cor do PS1 do shell bash para parar no final do comando?

12

Eu tenho uma cor PS1 personalizada, na qual tenho os comandos reais do shell em uma cor distinta, para poder ver rapidamente quais comandos digitei e separá-lo da própria saída do comando.

Suponha que a cor no PS1 esteja definida como 'azul' no prompt de comando e a cor padrão no meu shell seja branca.

  • Eu digito um comando, por exemplo, ls, (ls -l é azul)
  • A saída que gera, a primeira linha ainda está azul
  • Toda a linha restante vem em branco

O que eu quero é toda a saída após o comando ser 'branco'.

Outro exemplo:

  • Eu digito um comando 'gato', a cor é azul
  • A saída vem, toda a saída é azul

Gostaria que a saída fosse 'branca', mantendo o prompt de comando, digitei 'azul'

Em alguns comandos, tudo bem, outros comandos, a mesma cor transborda para a primeira linha da saída e, em seguida, a cor padrão é ativada e alguns outros comandos, toda a saída (por exemplo, gato) tem a mesma cor.

Existe uma maneira de manter apenas os comandos digitados em uma cor e o restante no padrão?

Estou no OSX.

EDIT # 1

Aqui está uma captura de tela à qual @ derobert está vinculada nos comentários que mostra o que estou procurando.

                 ss # 1

iQ.
fonte
2
Você precisa nos mostrar sua solicitação para que possamos identificar os erros.
Glenn Jackman

Respostas:

14

Você está basicamente querendo redefinir a cor do terminal antes de o bash executar o comando. Isso pode ser feito com a trap.

Por exemplo:

trap '[[ -t 1 ]] && tput sgr0' DEBUG

O Bash executa a DEBUGinterceptação imediatamente antes do comando, portanto, isso resultará na tput sgr0execução (que redefine os atributos de formatação) antes de cada comando.

A [[ -t 1 ]]é uma verificação de segurança para garantir que STDOUT é realmente um terminal. Pode haver alguns casos em que o STDOUT do bash não está conectado a um terminal (tubulação, ssh remoto, etc.) e, portanto, você não deseja tputenviar códigos de escape do terminal.

Patrick
fonte
Onde você coloca isso? Digamos que o PS1 não atrase a cor. Agora, como você adiciona esta linha para executar este comando logo após o usuário colocar seu comando e pressionar enter?
polym 23/07
1
@ polym no seu .bashrc(ou onde quer que $PS1esteja definido). Eu o colocaria ao lado da $PS1definição para que você saiba que eles estão relacionados.
23414 Patrick Patrick
ok uau, isso funciona. Alguma possibilidade de que isso possa dar errado?
polym 23/07
@polym não é mais #
Patrick
brilhante, é exatamente isso que eu precisava para redefinir a cor do terminal.
QI.