5 votes

L'invite du terminal "enregistre" certaines commandes sur la flèche vers le haut

J'ai ajouté un peu de script shell à mon invite pour m'amuser. Il alterne les couleurs des éléments de l'invite de façon aléatoire. Je l'ai fait simplement parce qu'un écran gris devient ennuyeux au bout d'un moment. Voici mon invite dans le fichier .bash-profile :

function next_hue
{
    color1=$((31 + (++color % 7)))   # set 31 to 30 for dark on light
    color1=$((31 + (++color % 7)))
    PS1="\n\e[0:${color}m[\W]\n\e[0:${color}m[\u]-> $reset" # set 1 to 0 for     dark on light
}

Cela permet d'alterner la couleur de mon message. C'est génial !

Le problème, c'est que la coquille reste parfois "coincée". Par exemple, la coquille se présente généralement comme suit :

directory
[username]->

Si j'ai récemment exécuté le programme docker run et que je remonte dans l'historique, `docker run' se bloque et je me retrouve avec ceci :

directory
[username]->docker run

Si j'ajoute une nouvelle commande, elle s'empile sur docker run :

directory
[username]->docker runcd /some/path

Je dois utiliser ctrl-c ou une autre option de ce type, et je ne peux pas utiliser l'option docker-run La commande n'est plus disponible à moins que je ne la tape entièrement. Qu'est-ce qui peut provoquer cette erreur ? J'ai beaucoup regardé mon invite et je pense qu'elle est correcte, mais c'était déroutant de la comprendre dès le départ.

2voto

John N Points 1418

Vous n'échappez pas aux caractères non imprimables dans votre invite. Voir cet article et utiliser " \[ " et " \] "autour des couleurs, quelque chose comme ceci (non testé) par exemple...

PS1="\n\e[0:\[${color}\]m[\W]\n\e[0:\[${color}\]m[\u]-> $reset"

Il se peut que vous deviez modifier cela. Comme je l'ai dit, ce n'est pas testé et il se peut que j'aie inséré un " \] "au milieu d'un code couleur. Pour mon invite, j'effectue l'échappement lorsque j'initialise les variables de couleur :

PS1_FG="\[$(tput setaf 223)\]"  # Prompt foreground colour (223 = pale orange/brown)

Pour ce que cela vaut, je recommande vivement l'utilisation de tput lorsqu'il s'agit de codes de contrôle. Il rend vos scripts plus portables et (IMHO) plus faciles à lire.

LesApples.com

LesApples est une communauté de Apple où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres utilisateurs d'appareils Apple, poser vos propres questions ou résoudre celles des autres.

Powered by:

X