Tengo un color PS1 personalizado donde tengo los comandos de shell reales en un color distinto, solo para poder ver rápidamente qué comandos escribí y separarlos de la salida del comando en sí.
Supongamos que el color en PS1 está configurado en 'azul' para el símbolo del sistema y el color predeterminado en mi shell es blanco.
- Escribo un comando, por ejemplo, ls, (ls -l es de color azul)
- La salida que genera, la primera línea sigue siendo azul
- Todas las líneas restantes son blancas.
Lo que quiero es que toda la salida después del comando sea 'blanca'.
Otro ejemplo:
- Escribo un comando 'gato', el color es azul
- La salida viene, toda la salida es azul
Me gustaría que la salida sea 'blanca' mientras mantengo el símbolo del sistema que escribí 'azul'
En algunos comandos, está bien, en otros comandos, el mismo color se desborda en la primera línea de la salida y luego se activa el color predeterminado y en algunos otros comandos, toda la salida (por ejemplo, cat) tiene el mismo color.
¿Hay alguna manera de mantener solo los comandos que escribí en un color y el resto al valor predeterminado?
Estoy en OSX
EDITAR # 1
Aquí hay una captura de pantalla a la que @ derobert está vinculada en los comentarios que muestra lo que estoy buscando.
Respuestas:
Básicamente, desea restablecer el color del terminal justo antes de que bash ejecute el comando. Esto se puede hacer con a
trap
.Por ejemplo:
Bash ejecuta la
DEBUG
trampa inmediatamente antes del comando, por lo que esto setput sgr0
ejecutará (lo que restablece los atributos de formato) antes de cada comando.Este
[[ -t 1 ]]
es un control de seguridad para asegurarse de que STDOUT es realmente un terminal. Puede haber algunos casos en los que STDOUT de bash no está conectado a un terminal (tubería, ssh remoto, etc.), por lo que no deseatput
enviar códigos de escape de terminal.fuente
.bashrc
(o donde sea que$PS1
esté configurado). Lo pondría justo al lado de la$PS1
definición para que sepa que están relacionados.