web-dev-qa-db-fra.com

Comment effacer le formatage de PS1 dans gnome-terminal?

J'ai configuré gnome-terminal dans .bashrc pour avoir des couleurs personnalisées:

PS1='${debian_chroot:+($debian_chroot)}\[\033[00;37m\][\[\033[00;32m\]\t\[\033[00;37m\]] \[\033[01;34m\]\u\[\033[00;37m\]@\[\033[01;34m\]\h\[\033[00;37m\]:\[\033[01;34m\]\w\[\033[01;32m\]$ '

Et cela signifie que lors de l'exécution de quelque chose comme ceci:

enter image description here

La sortie ressemble à ceci même si la première ligne doit être blanche et elle était blanche jusqu'à ce que la commande saisie soit également verte:

enter image description here

Alors, comment puis-je éviter que la couleur du texte de sortie ne soit affectée par le fait que j'ai défini la couleur de commande sur vert? J'utilise Ubuntu GNOME 15.04 avec GNOME 3.16.

Mise à jour des informations:

J'ai remarqué que lors de l'exécution de Sudo rkhunter --nocolor --update, la sortie est entièrement verte.

4
user364819

Le problème est que vous configurez la commande pour qu'elle soit en vert mais ne fermez pas le code d'échappement de couleur. Par conséquent, toutes les lignes suivantes, y compris le résultat de toutes les commandes auxquelles aucun formatage n'a été appliqué, sont affichées dans cette couleur. Pour contourner le problème ( source ), vous pourriez trap imprimer le code de fermeture du signal DEBUG. Ajouter cette ligne à votre ~/bashrc

trap 'printf "\e[0m" "$_"' DEBUG

Cela imprimera \e[0m (ce qui fermera le code de couleur ouvert). Comme il s'agit de trapped au signal DEBUG, il sera exécuté avant toute commande exécutée. Donc, entre frapper Enter et la commande en cours d'exécution. Comme expliqué dans man bash:

Si un sigspec est DEBUG, la commande arg est exécutée avant chaque commande simple, commande pour, commande cas, commande, sélection, chaque arithmétique pour commande et avant l'exécution de la première commande dans une fonction Shell (voir Shell GRAMMAR ci-dessus).

8
terdon