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.
Respostas:
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:
O Bash executa a
DEBUG
interceptação imediatamente antes do comando, portanto, isso resultará natput sgr0
execuçã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 desejatput
enviar códigos de escape do terminal.fonte
.bashrc
(ou onde quer que$PS1
esteja definido). Eu o colocaria ao lado da$PS1
definição para que você saiba que eles estão relacionados.