Les séquences d'échappement ANSI consistent en une séquence de caractères commençant par le caractère d'échappement, le caractère 27. Le caractère suivant est souvent (mais pas toujours) un crochet carré ouvert: [
La commande echo peut envoyer des caractères d'échappement si vous spécifiez -e
et utilisez \e
pour échapper.
La norme ANSI définit 8 couleurs, plus un mode lumineux, donnant un total de 16 possibilités. La séquence est la suivante:
\e[<number>m
Où <number>
est l'un des:
Premier plan:
- 30 Noir
- 31 Rouge
- 32 Vert
- 33 Jaune
- 34 Bleu
- 35 Magenta
- 36 Cyan
- 37 Blanc
Contexte:
- 40 Noir
- 41 Rouge
- 42 Vert
- 43 Jaune
- 44 Bleu
- 45 Magenta
- 46 Cyan
47 Blanc
0 Tout réinitialiser
- 1 gras
Donc, pour rendre votre premier plan rouge et votre arrière-plan jaune:
$ echo -e "\e[31m\e[43m"
Et pour activer le gras:
$ echo -e "\e[1m"
Bien sûr, vous pouvez les combiner tous ensemble:
$ echo -e "\e[31m\e[43m\e[1m"
Il existe de nombreux autres codes d'échappement pour faire autre chose.
Par exemple - effacez l'écran et déplacez le curseur en haut à gauche:
$ echo -e "\e[2J\e[1;1H"
Ce qui est utile lors du changement de couleur:
$ echo -e "\e[31m\e[43m\e[1m\e[2J\e[1;1H"
Ce qui va changer les couleurs, effacer l'écran et placer le curseur en haut à gauche. Eh bien, presque en haut à gauche. Echo met un retour chariot, donc il descend d'une ligne. Vous pouvez ajouter -n
à l'écho pour éviter cela si vous êtes pointilleux.
Si vous vous trompez et que vous ne voyez pas ce que vous tapez, vous pouvez réinitialiser les couleurs du terminal à la normale en appuyant sur:
Ctrl+v
[
0
m
Return
À ce que vous espérez est l'invite de commande. Il se plaindra d'une commande inconnue, mais vous pourrez voir à nouveau ce que vous faites.
echo -ne '\e[31;43m'
(au lieu de ce qui précèdeecho -e "\e[31m\e[43m"
).Notez que les Xterms modernes prennent en charge les couleurs 32 bits!
Exemple simple. Pour définir un joli fond violet foncé (hé, chacun à son goût) de valeur # 53186f, vous devez:
Notez que cela change instantanément la couleur de la fenêtre entière, pas seulement du texte suivant. Ceci est particulièrement utile pour rendre une fenêtre évidemment différente après avoir été envoyée à un serveur (par exemple). Mettez l '"écho" ci-dessus dans votre .bashrc et votre terminal change automatiquement de couleur lorsque vous vous connectez à ce serveur (mais ne changera pas lorsque vous vous déconnecterez)
Vous pouvez passer des HEURES sur le net à la recherche de cela - la plupart des documents ne parlent que des 16 couleurs ANSI originales.
Sources: http://www.steike.com/code/xterm-colors/ et http://rtfm.etla.org/xterm/ctlseq.html (regardez sous "Operating System Controls")
Remarque: la séquence d'échappement ci-dessus est valide pour les XTerms et peut ne pas fonctionner pour d'autres implémentations d'émulateurs de terminaux de fenêtrage "de type XTerm" qui peuvent "ressembler" à un XTerm. Par exemple, "gnome-terminal" ou "konsole" ont des séquences d'échappement différentes, ou peuvent ne pas implémenter de changement de couleur du tout.
la source
Oui. Les terminaux ANSI prennent en charge les codes d'échappement ANSI . Chaque
Control Sequence Introducer
(CSI
) code dans le format suivant:Le caractère Ascii
27
(leESC
caractère) ou1b
en hexadécimal, suivi d'un crochet gauche, puis d'une lettre indiquant l'action à utiliser.Notez qu'une liste de
;
paramètres séparés peut être fournie directement avant le<<<CODE>>>
paramètre.Maintenant, les couleurs utilisent un sous-ensemble de
CSI
codes, lesSelect Graphic Rendition
codes. Ce sont sous la forme:Le
SGR
code est transmis en tant que paramètre leCSI
. LesSGR
codes 30-49 sont pertinents pour votre question . Les codes 30-39 définissent la couleur de premier plan. Les codes 40-49 définissent la couleur d'arrière-plan.Les codes 38 et 48 sont des codes spéciaux. Ce sont ceux qui vous permettent d'utiliser des valeurs RVB. Le format de ceux-ci est:
Remarque: les utilisations alternatives incluent
\x1b[<3 or 4>8;5;<web safe color index>m
. Avec cette utilisation, il existe un codage couleur complètement différent. Voir le lien en haut de cette réponse pour plus d'informations.Les codes 39 et 49 définissent les couleurs de premier plan et d'arrière-plan à leurs valeurs par défaut, qui sont définies terminal par terminal.
En pratique, les couleurs 30-37 40-47 sont légèrement différentes de ce que disent leurs étiquettes.
Pour obtenir des couleurs claires, vous utilisez le SGI pour le gras,
1
. Bold est un nom trompeur. Cela ne rend pas la police en gras. Cela augmente en fait la luminosité du texte. En gras, les couleurs deviennent:Remarque: les deux derniers blocs de numéros de couleurs sont pertinents pour l'avant-plan et l'arrière-plan (
<index> + (30 or 40)
).Pour supprimer tous les styles (retour au mode par défaut / normal), utilisez
SGR
0.CSI
les codes ne sont pas tous graphiques. Par exemple,ESC[2J
effacera votre terminal.ESC[<y>;<x>H
définit la position du curseur (indexé 1). Voir l'article wikipedia pour plus d'informations.Remarque: pour les tester, utilisez
echo -e
ouprintf
.la source
Remarque: le «^ [» est le caractère d'échappement et est inséré avec un CTRL-V, CTRL- [et ^ G est un caractère de cloche, inséré avec CTRL-V, CTRL-G
Le bloc suivant se trouve dans mon .bash_profile et garantit que mes xterms sur ce système sont TOUJOURS blanc sur noir, même après avoir ouvert une session sur un autre système qui peut avoir changé mes couleurs.
la source
vérifiez également un projet ScriptEchoColor,
il est entièrement fait dans des scripts bash,
il a des paquets pour Ubuntu ici,
mais ces scripts peuvent être installés sur n'importe quelle distribution si vous savez comment (les plus récents peuvent être téléchargés depuis son git également).
vous pouvez utiliser des noms de couleur raccourcis ou étendus comme:
un échantillon:
Assurez-vous également de jeter un œil à xtermcontrol , pour un contrôle plus étendu sur l'xterm sur lui-même (pas seulement sur les personnages).
la source
Parmi les nombreux codes ANSI CSI se trouve celui appelé SGR, ou Select Graphic Rendition. Il s'agit de ESC,,
[
parameters,,m
où les paramètres sont un ou plusieurs entiers au format ASCII, séparés par des points-virgules. Les nombreux paramètres SGR différents sont répertoriés sur la page Wikipedia ci-dessus (bien qu'il ne soit pas détaillé dans tous).Certains paramètres, tels que
1
(gras ou intensité accrue) et31
(texte rouge) sont autonomes et peuvent être utilisés individuellement ou combinés, comme dansESC[31m
ouESC[1;31m
pour donner du texte de premier plan rouge standard et rouge gras, respectivement.D'autres prennent les paramètres eux-mêmes, qui sont simplement fournis après le code sous forme de nombres séparés par des points-virgules. Ainsi, par exemple,
ESC[38;5;219m
afficherait le texte de premier plan dans la couleur étendue numéro 219 etESC[38;2;150;100;50m
l'afficherait dans la couleur avec la valeur RVB 150, 100, 50. Dans ce cas,38
est la commande "Extended set foreground color", qui est toujours suivie par une sous-commande. La sous-commande2
prend trois paramètres, les valeurs des composants rouge, vert et bleu. Différemment, la sous-commande ne5
prend qu'une seule valeur de plus, un nombre compris entre 0 et 255 spécifiant une couleur à partir d'une table avec laquelle le terminal est configuré.La fonction shell suivante peut être pratique pour utiliser ces codes:
Vous pouvez l'utiliser comme ceci:
Notez que si vous ne lui donnez aucun paramètre par
sgr()
défaut, le code SGR 0, ce qui signifie désactiver tous les attributs, réinitialiser le texte à la valeur par défaut pour ce terminal.la source
ESC[38
...m
etESC[38
...m
peuvent / devraient (dépend de votre source d'information - l'ultime étant, je crois, itu.int/rec/T-REC-T.416-199303-I ) devrait utiliser le, sinon réservé, caractère:
(pour séparer les éléments de paramètre ) de sorte que le;
soit utilisé uniquement entre des chaînes de paramètres complètes - c'est-à-dire qu'ilESC[38;2;150;100;50m
devrait être écritESC[38:2::150:100:50m
...2
et le150
- comme personne, à ma connaissance , n'a jamais défini quelle valeur doit y entrer, la valeur par défaut vide doit être utilisée - mais elle est souvent omise et l'utilisation uniquement;
comme séparateur rend impossible le traitement fiable des informations conformément à la spécification.