J'ai une couleur PS1 personnalisée où j'ai les commandes shell réelles dans une couleur distincte, juste pour que je puisse voir rapidement quelles commandes j'ai tapées et les séparer de la sortie de commande elle-même.
Supposons que la couleur dans PS1 soit définie sur «bleu» pour l'invite de commande et que la couleur par défaut dans ma coque soit blanche.
- Je tape une commande, par exemple ls, (ls -l est coloré en bleu)
- La sortie qu'il génère, la première ligne est toujours bleue
- Toute la ligne restante est blanche
Ce que je veux, c'est que toutes les sorties après la commande soient «blanches».
Un autre exemple:
- Je tape une commande 'chat', la couleur est bleue
- La sortie vient, toute la sortie est bleue
Je voudrais que la sortie soit «blanche» tout en gardant l'invite de commande que j'ai tapé «bleu»
Sur certaines commandes, c'est bien, d'autres commandes, la même couleur déborde dans la première ligne de la sortie, puis la couleur par défaut entre en action et certaines autres commandes, la sortie entière (par exemple cat) a la même couleur.
Existe-t-il un moyen de conserver uniquement les commandes que j'ai tapées dans une seule couleur et le reste à la valeur par défaut?
Je suis sur OSX.
EDIT # 1
Voici une capture d'écran à laquelle @ derobert est liée dans les commentaires qui montre ce que je recherche.
Réponses:
Vous voulez essentiellement réinitialiser la couleur du terminal juste avant que bash n'exécute la commande. Cela peut être fait avec un
trap
.Par exemple:
Bash exécute l'
DEBUG
interruption immédiatement avant la commande, ce qui entraîneratput sgr0
(ce qui réinitialise les attributs de formatage) avant chaque commande.Il
[[ -t 1 ]]
s'agit d'un contrôle de sécurité pour vous assurer que STDOUT est bien un terminal. Il peut y avoir des cas où le STDOUT de bash n'est pas connecté à un terminal (tuyauterie, ssh distant, etc.), et donc vous ne vouleztput
pas envoyer de codes d'échappement de terminal.la source
.bashrc
(ou n'importe où$PS1
est défini). Je le mettrais juste à côté de la$PS1
définition pour que vous sachiez qu'ils sont liés.