Pourquoi cette invite bash un comportement étrange / disparaissant, et comment puis-je le fixer (OS X)?

StackOverflow https://stackoverflow.com/questions/706750

  •  22-08-2019
  •  | 
  •  

Question

J'avoue que j'utiliser un bash de longue haleine un peu rapide:

--(username)-(Wed April 01|12:00:00)--(~ $

Récemment, j'ai eu l'idée brillante de le changer de sorte qu'en fonction de la valeur de sortie de la commande précédente, si le succès, les éléments intérieurs () 's serait vert, et si l'échec, ils seraient rouges. Je l'ai eu à travailler pour la plupart (certains états de sortie impairs vont changer la couleur à autre chose, mais je suis ok avec elle), mais lors de la saisie d'une commande qui est plus d'une ligne, et les causes du terminal pour faire défiler, la disparait rapide! Mon message a bien fonctionné quand il n'y avait pas de couleur, donc je devine qu'elle est liée à ma Escaping couleur, et surtout mon unclosed [ 's, mais je ne peux pas épingler vers le bas.

#.profile
export PS1='--(\e[$((32-${?}))m\u\e[0m)-(\e[$((32-${?}))m\d\e[0m|\e[$((32-${?}))m\T\e[0m)--(\e[$((32-${?}))m\w\e[0m \$ '

Merci d'avance!

Était-ce utile?

La solution

On dirait que cette devrait résoudre votre problème.

Cela semble fonctionner pour me*:

export PS1='--(\[\e[$((32-${?}))m\]\u\[\e[0m\])-(\[\e[$((32-${?}))m\]\d\[\e[0m\]|\[\e[$((32-${?}))m\]\T\[\e[0m\])--(\[\e[$((32-${?}))m\]\w\[\e[0m\] \$ '

* bien, vraiment export PS1='\u@\h:\w\$ ' fonctionne pour moi

Pour citer le poste lié, la réponse réside dans l'ajout \ [et \] dans toutes vos séquences de couleurs dans votre déclaration PS1:

  

Avant d'avoir la valeur suivante pour PS1:

     

\ e [0; 34m \ h: \ w [] \ $ \ e [0 m '

     

ce qui m'a donné une invite bleu belle de la forme suivante

     

nom d'hôte: répertoire de travail [commande number] $

     

Cependant, j'ai eu le même problème ligne d'emballage que vous avez fait. Le correctif a été d'insérer \ [et \] autour de la norme ANSI échappe de telle sorte que la coquille ne sait pas les inclure dans le calcul de la ligne d'emballage. Il en résulte la valeur suivante pour PS1:

     

\ [\ e [0; 34m \] \ h: \ w [] \ $ \ [\ e [m \]

Autres conseils

http://mywiki.wooledge.org/BashFAQ/053 - J'ai une invite de fantaisie avec des couleurs, et maintenant bash ne semble pas savoir comment mon terminal est large . Les lignes enveloppent de façon incorrecte autour.

Par ailleurs; pour votre référence; voici mon PS1 qui ressemble à ceci:
(source: lyndir.com )

\[$reset$bold$green\]\u@\h\[$blue\] \W \[$red\]${?/#0/\[$green\]}\$\[$reset\]

Remarquez comment je mets tous les codes de couleur dans $parameters pour le rendre plus propre, mais plus important encore, parce que vous devez utiliser tput pour les générer . Voir:

http://mywiki.wooledge.org/BashFAQ/037 - Comment puis-je imprimer du texte en différentes couleurs

Je déclare mes paramètres de couleur dans un script utilitaire qui se fait par mon ~/.bashrc ( et tous les scripts que j'écris) que l'on appelle bashlib .

Sur une note finale; mettre votre définition de PS1 dans ~/.bashrc et ne export pas. Il n'y a absolument aucune raison pour laquelle vous devez ajouter la définition de votre PS1 à l'environnement de tout et de tous les processus de vous frayer votre shell.

Vous semblez juste manquer les supports de début et de fin autour de vos évasions (avant le premier \ « e » et après la dernière « m »):

PS1='--(\[\e[$((32-${?}))m\u\e[0m)-(\e[$((32-${?}))m\d\e[0m|\e[$((32-${?}))m\T\e[0m)--(\e[$((32-${?}))m\w\e[0m\] \$ '

Comme mentionné précédemment, le PS1 var n'a pas besoin d'être exporté. Que votre shell a besoin de le voir

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top