J'essaie de configurer PS1 comme suit.
Vert = "\ [\ e [32; 1m \]" Rouge = "\ e [0; 31m" Violet = "\ e [0; 35m" STARTCOLOR = "\ [\ e [40m \]" ENDCOLOR = "\ [\ e [0m \]" export PS1 = "$ STARTCOLOR $ Green \ u @ $ Purple \ h $ Red \ w $ Green> $ ENDCOLOR"
Et j'ai quelques questions.
- Quelle est la différence entre "[\ e [32; 1m]" et \ e [32; 1m "? Sont-ils les mêmes?
- Après avoir exécuté la commande 'export PS1', cela fonctionne bien, mais quand je donne l'entrée environ 20 caractères, les caractères sont remplacés comme je les ai joints. Quel est le problème avec ça?
- Quelle est la signification de STARTCOLOR (\ e [40m) / ENDCOLOR (\ e [0m)?
http://a.imageshack.us/img8/606/resultqm.jpg
AJOUTÉE
Après quelques tests, j'ai obtenu le changement suivant qui pourrait résoudre le problème. Autrement dit, le format "\ e" doit être remplacé par le format "\ [\ e".
Rouge = "\\ e [1; 31m" - ne fonctionne pas Rouge = "\ [\ e [1; 31m \]" - fonctionne
\$
pour basculer automatiquement entre l'indication racine et non racine.Du manuel bash:
\[
et\]
ne sont pas transmises au terminal. Ils disent à bash que les caractères entre eux ne seront pas imprimés. Sans eux, bash ne pouvait pas savoir que la séquence suivant le caractère d'échappement (par exemple[32;1m
) ne prend pas de place à l'écran, ce qui explique pourquoi elle n'a pas calculé correctement la longueur de l'invite lorsque vous les avez laissés de côté.Notez que vous n'avez pas été très cohérent dans votre question (ou peut-être que c'est juste une erreur avec Markdown); vous devez avoir une séquence littérale de parenthèse antislash
$PS1
, pas seulement une parenthèse (qui serait affichée littéralement).Les séquences d'échappement commençant par
\e
sont interprétées par l'émulateur de terminal. Ils sont documentés dans le document des séquences de contrôle Xterm (ctlseqs) (les autres émulateurs de terminaux sont généralement compatibles). Par exemple,\e[32;1m
passe au premier plan gras et vert;\e[40m
fait passer la couleur d'arrière-plan au noir;\e[0m
restaure les attributs par défaut.la source
La plupart des émulateurs de terminaux modernes peuvent utiliser des codes d'échappement ANSI pour contrôler divers aspects de l'affichage.
La plupart des codes ANSI commencent par le code à 2 caractères ESC- [C'est le caractère d'échappement (ASCII décimal 27) suivi du caractère de crochet ouvert. Cette séquence est également connue sous le nom de CSI ou Control Sequence Initiator.
Parce que le caractère d'échappement n'est pas un caractère que vous pouvez saisir directement (la touche Échap a d'autres utilisations, souvent spécifiques à l'application), bash utilise '\ e' pour s'y référer.
La modification de la couleur du texte utilise la commande ANSI Set Graphics Mode:
où
<value>
peut être une liste de valeurs séparées par des points-virgules (;
). Normalement, une seule valeur est utilisée, bien que l'attribut gras soit utile conjointement avec les attributs de couleur.En regardant les valeurs répertoriées dans la réponse d'Alexander Pogrebnyak, le 0 ou 1 avant le point-virgule sélectionne gras ou non:
Il y a une liste utile des codes ici http://ascii-table.com/ansi-escape-sequences.php
la source