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

10

Eu tenho uma cor personalizada do PS1 onde eu tenho os comandos shell reais em uma cor distinta, apenas para que eu possa ver rapidamente quais comandos eu digitei e separá-los da própria saída do comando.

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

  • eu digito um comando, por exemplo ls, (ls -l é colorido em azul)
  • A saída que gera, a primeira linha ainda é azul
  • Toda a linha restante é branca

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

Outro exemplo:

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

Eu gostaria que a saída fosse 'branca', mantendo o prompt de comando que eu digitei 'blue'

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 entra em ação e alguns outros comandos, toda a saída (por exemplo, cat) tem a mesma cor.

Existe uma maneira de manter apenas os comandos que eu digitei em uma cor e o restante para o padrão?

Estou no OSX.

EDIT # 1

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

    
por iQ. 23.07.2014 / 17:36

1 resposta

11

Você está basicamente querendo resetar a cor do terminal antes que o bash execute o comando. Isso pode ser feito com um trap .

Por exemplo:

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

O Bash executa a interceptação DEBUG imediatamente antes do comando, portanto, isso resultará na execução de tput sgr0 (que restaura os atributos de formatação) antes de cada comando.

O [[ -t 1 ]] é uma verificação de segurança para garantir que o STDOUT seja 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 que tput envie códigos de escape de terminal.

    
por 23.07.2014 / 17:53

Tags