¿Cómo detengo un color bash shell PS1 para que se detenga al final del comando?

12

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.

                 ss # 1

iQ.
fuente
2
Debe mostrarnos su solicitud para que podamos identificar los errores.
Glenn Jackman

Respuestas:

14

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:

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

Bash ejecuta la DEBUGtrampa inmediatamente antes del comando, por lo que esto se tput sgr0ejecutará (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 desea tputenviar códigos de escape de terminal.

Patricio
fuente
¿Dónde pones esto? Digamos que PS1 no retrasa el color. Ahora, ¿cómo agrega esta línea para ejecutar este comando justo después de que el usuario ingresó su comando y presionó enter?
polym
1
@polym en tu .bashrc(o donde sea que $PS1esté configurado). Lo pondría justo al lado de la $PS1definición para que sepa que están relacionados.
Patrick
ok wow eso funciona ¿Alguna posibilidad de que esto pueda salir mal?
polym
@polym ya no más
Patrick
genial, eso es exactamente lo que necesitaba para restablecer el color del terminal.
iQ.