Réponses:
La chaîne est en fait \033[
et ce n'est pas tout.
Après cette parenthèse ouvrante vient une série de chiffres et de symboles. Cette chaîne est connue sous le nom de séquence d'échappement et sert, entre autres, à contrôler le curseur et la couleur du texte de la console.
les séquences d'échappement non imprimables doivent être
\[\033[ and \]
Si la séquence d'échappement contrôle la couleur du texte, elle sera suivie d'un m
.
Voici un tableau pour les séquences de couleurs:
Black 0;30 Dark Gray 1;30
Blue 0;34 Light Blue 1;34
Green 0;32 Light Green 1;32
Cyan 0;36 Light Cyan 1;36
Red 0;31 Light Red 1;31
Purple 0;35 Light Purple 1;35
Brown 0;33 Yellow 1;33
Light Gray 0;37 White 1;37
Donc, si vous voulez que l'invite de votre console soit bleue, vous utiliserez la séquence d'échappement suivante (dans le nom de fichier que j'oublie):
\[\033[34m\]
(Remarquez le m
)
Cependant, cette séquence d'échappement ne contrôle pas seulement la couleur. Il peut également contrôler le mouvement du curseur. Voici un tableau / liste avec les codes de mouvement et comment ils fonctionnent:
Positionnez le curseur:
\033[<L>;<C>H
Ou
\033[<L>;<C>f
place le curseur sur la ligne L et la colonne C.
Déplacez le curseur vers le haut de N lignes:
\033[<N>A
Déplacez le curseur vers le bas sur N lignes:
\033[<N>B
Déplacez le curseur vers l'avant N colonnes:
\033[<N>C
Déplacer le curseur vers l'arrière N colonnes:
\033[<N>D
Videz l'écran, passez à (0,0):
\033[2J
Effacer jusqu'à la fin de la ligne:
\033[K
Enregistrer la position du curseur:
\033[s
Restaurer la position du curseur:
\033[u
Sachez simplement que les deux derniers peuvent ne pas fonctionner dans l'émulateur de terminal que vous utilisez. Apparemment, seulement xterm
et nxterm
utilisez ces deux séquences.
Et exemple en utilisant une de ces séquences d'échappement: disons que je veux positionner mon curseur à la ligne 3, colonne (caractère) 9. Pour cela, j'utiliserais
\[033\[3;9H]
(Je suppose que la colonne 0 est la première position, ce serait donc le 8ème caractère).
Source: http://www.tldp.org/HOWTO/Bash-Prompt-HOWTO/x329.html (lire également 6.2)
Lecture plus générale: http://ascii-table.com/ansi-escape-sequences.php
[2K
efface toute la ligne avant et après le curseur. Une bien meilleure source serait l'article de Wikipedia, ou vous pouvez aller directement à ECMA-48 , section 8.3.117 SGR - Select Graphic Rendition .
0;
dans les séquences de couleurs n'est pas nécessaire. Cela fait juste la couleur d'arrière-plan par défaut avant de définir le premier plan. Vous pouvez également définir l'arrière-plan avec 4x
.
Ce sont des commandes de contrôle pour le terminal.
Les terminaux étaient à l'origine des appareils plutôt stupides connectés à un port série, et non ces logiciels GUI multi-onglets sophistiqués avec des menus que nous avons maintenant. Puisqu'ils ne recevaient qu'un flux de caractères (octets), il n'y avait pas de séparation claire entre les données (ce qu'il fallait imprimer à l'écran) et les commandes (comment l'imprimer). Au lieu de cela, les commandes sont représentées par des caractères de contrôle spéciaux.
Les caractères de contrôle évidents sont des trucs comme le saut de ligne (nouvelle ligne), le retour arrière et le bip de cloche, mais des commandes plus spécifiques sont données sous forme de séquences de caractères, en commençant par le ESC
caractère (code 27 en décimal, 0x1b en hexadécimal ou 033 octal). Il est souvent représenté par ^[
ou \033
comme dans votre exemple.
La séquence ESC [
est appelée CSI, ou introducteur de séquence de contrôle, et elle démarre une commande avec des paramètres numériques facultatifs, se terminant généralement par une lettre qui définit la commande principale. La plupart des séquences d'échappement courantes entrent dans cette classe.
Des listes des codes d'échappement peuvent être trouvées, par exemple dans la console_codes(4)
page de manuel, et sur la page Wikipedia pour les codes d'échappement ANSI .
Quelques exemples:
ESC [ 4 A move cursor 4 lines up (4 can be any number)
ESC [ 5 B move cursor 5 lines down
ESC [ 2 K erase current line
ESC [ 30;46 m set black text (30) on cyan background (46)
ESC [ 0 m reset color and attributes
Vous pouvez tester les commandes avec par exemple Bash. En utilisant le -e
drapeau, la echo
commande intégrée accepte \033
comme représentation du ESC
personnage.
Par exemple, cela imprimera un message d'accueil en couleur au milieu de l'écran et un autre normalement à la position d'origine du curseur:
echo -e '\033[s\033[12;30f\033[30;46m Hello! \033[0m\033[uhello'
La séquence ESC ]
que vous avez mentionnée est la commande OSC ou Operating System, qui est principalement utilisée dans la commande pour définir le titre de la fenêtre dans xterm
et d'autres, par exemple:
echo -e '\033]0;new window title\a'
Ensuite, il y a aussi ESC ( A
(et d'autres lettres) qui définissent des jeux de caractères nationaux sur certains terminaux, avec un effet potentiellement hilarant .
Échap suivi d'un crochet droit escape]
est utilisé pour introduire une commande de système d'exploitation ( OSC
).
C'est dans ECMA-48 , et vous pouvez lire un résumé des séquences de contrôle utilisées par xterm dans XTerm Control Sequences , par exemple, pour changer le titre de la fenêtre du terminal.
Les séquences d'échappement peuvent commencer avec différents personnages. Le C1 (8 bits) caractères de contrôle section dans XTerm séquences de contrôle mentionne quelques - unes de celles -ci : CSI
(que vous voyez comme escape[
, APC
, DCS
, PM
. La raison du caractère différent (seconde) est parce que la paire (évasion et ]
) est associée à une caractère de contrôle à un octet utilisé pour différents types de séquence d'échappement.
Si vous lisez la spécification, vous remarquerez qu'elle CSI
est utilisée pour les contrôles avec des paramètres numériques, tandis que OSC
permet les chaînes. Au-delà de la syntaxe, le comité qui a créé cette norme avait à l'esprit des utilisations pour APC
et PM
qui différaient de DCS
et OSC
.
Ceux-ci sont appelés codes d'échappement ANSI , et ils sont répertoriés dans la page de manuel pour console_codes . Ils ne sont pas spécifiques à Bash, mais fonctionnent plutôt dans n'importe quelle application console tant que le terminal les prend en charge (la plupart des émulateurs de terminaux le font).
Les "séquences d'échappement" décrites dans les autres réponses dépendent du TYPE de terminal que vous avez (le plus souvent "ANSI" ou des dérivés / similaires).
$ echo $TERM
xterm
Si vous souhaitez écrire des scripts qui sont (quelque peu) INDÉPENDANTS du terminal, mais qui utilisent toujours par exemple la couleur et d'autres fonctionnalités spéciales, jetez un œil au contenu de man terminfo
.
par exemple
$ echo -n ".";tput setb 6;tput setf 4;echo -n "test";tput sgr0;echo "."
imprimera .test.
avec test
un fond jaunâtre et une couleur de premier plan rouge, et cela fonctionnera pour TOUT terminal qui est réellement capable d'utiliser les couleurs de la même manière.
Pour voir ce qui est réellement imprimé, canalisez-le od -t x1z
comme dans
$ tput sgr0 | od -t x1z
0000000 1b 28 42 1b 5b 6d >.(B.[m<
0000006
... où les valeurs sont affichées en hexadécimal (en raison de "x").