Table des matières

Écrire le caractère d'échappement ESC

Nota :

Contributeurs, les FIXME sont là pour vous aider, supprimez-les une fois le problème corrigé ou le champ rempli !

Introduction

Le caractère d’échappement, produit par la touche ESC,
Permet de s’échapper d'un flux texte…
Pour s'adresser au terminal2) (une console virtuelle3) ou un terminal fenêtre4)), utilisé par une interface de communication en mode texte5).

Le caractère d’échappement introduit (permet de constituer) les séquences d'échappement,
Qui insérées dans un flux texte, permettent d'envoyer des codes de formatage texte, à la sortie du terminal (par exemple l'écran).

Le caractère d'échappement ESC est un caractère de contrôle6) non imprimable,
Il est le 27em caractère du code ASCII7) (033 en octal, (0)xb1 en hexadécimal).
Non-imprimable, il ne dispose pas d'un caractère textuel (graphique), pour le dessiner (l'écrire),
Empêchant ainsi, de le manipuler comme un caractère imprimable (par exemple a) dans une chaîne de caractère.

Présentation

Ce tuto propose d'écrire le caractère d'échappement,
D'expliquer sa représentation textuelle.

De l'écrire,

Saisi au clavier

Pour écrire le caractère d'échappement depuis le clavier,
Dans la ligne de commande ou dans un éditeur de texte,
Nous devons utiliser les combinaisons de touches suivantes :

Depuis la ligne de commande

Ctrl+V puis ESC

^[
Rappel : Le caractère d'échappement est un caractère de contrôle non imprimable.
En ce sens, il ne dispose pas de caractère textuel pour être affiché.

Pour indiquer sa présence (car nous avons besoin de le visualisé),
Il est utilisé le motif ^[, composé de deux caractères : ^ et [.

Qui évidement ne sont pas le caractère d'échappement. Mais des simples caractères imprimables.
Saisir au clavier (ou copier/coller) ^[, ne formera pas le caractère d'échappement.

Avec un éditeur de texte

Écrire le caractère d'échappement
Éditeurs Combinaisons des touches
vim Ctrl+V puis ESC
emacs Ctrl+Q puis ESC
nano ESC+V puis ESC

Retourné par interprétation

Lors de l'interprétation de l'interpréteur de commande bash,
Les caractères de contrôle protégés par contre oblique :

Et

Sont remplacés par le caractère d’échappement.

Le caractère $ et les commandes echo -e et printf,
Permettent de remplacer les caractères de contrôle protégés par contre oblique par les caractères de contrôle qu'ils représentent.

Avec le caractère $

L'interprétation de bash réalise le remplacement des caractères de contrôle protégés par contre oblique,
Avec le mécanisme de protection $'<chaîne>'.

Voir : man bash section PROTECTIONS.

echo $'\e' >/tmp/df

ou

echo $'\c[' >/tmp/df
L'option -v de la commande cat8) permet d'afficher les caractères non-imprimables.
(Sauf les sauts de ligne et les tabulations horizontales).
Il sont alors représentés par une séquence de caractère débutant soit par ^, soit par M-.

L'option -t permet de représenter aussi les tabulations horizontales.

Sauf pour les exceptions des caractères de tabulation horizontale et de saut de ligne (voir ci-dessus).
Que se soit avec l'option -v ou -t, les caractères de contrôles sont affichés par leurs représentations textuels.
Ainsi passés au terminal, ce dernier ne les reconnaît plus comme caractères de contrôle. Et leurs contrôles ne sont pas appliqués.
cat -v /tmp/df
^[

Le caractère $ introduit aussi le développement des paramètres (et variables).

L'opérateur de transformation de paramètre E permet lors du développement des paramètres, le remplacement des caractères de contrôle protégés par contre oblique.

Voir : man bash section DÉVELOPPEMENTS > Développement des paramètres > Transformation de paramètre.

Ainsi pour la variable var, avec :
var=\\e ou var='\e' ou var="\e" ou var=$'\e' ou var=$'\c['

var=\\e
echo ${var@E} >/tmp/df
cat -v /tmp/df
^[
unset var  # Destruction de la variable var

Avec la commande echo

L'option -e de la commande echo, permet le remplacement des caractères de contrôle protégés par contre oblique.

echo -e "\e" >/tmp/df
cat -v /tmp/df
^[

Avec la commande printf

La commande printf, réalise le remplacement des caractères protégés par contre oblique

printf "\e" >/tmp/df

Ou

printf %b "\e" >/tmp/df
cat -v /tmp/df
^[

Usages

Avec les commandes echo -e et printf :
Les caractères protégés par contre oblique s'utilisent, dans une chaîne de caractère protégée entre guillemets doubles ().

Pour ne pas utiliser la protection des guillemets doubles, les caractères protégés par contre oblique, doivent être protégés par le caractère de protection \ (contre oblique). Par exemple : \\e.

Écrire le caractère d'échappement, ne suffit pas pour créer une séquence d'échappement.
Le caractère d'échappement doit être suivit du caractère [ (crochet ouvrant) et du code de la séquence.

Pour une console virtuelle ou un terminal fenêtre, la séquence d'échappement notée ^[[1m met en gras.
Et ^[[0m retourne au format normal.
Donc sous bash :

La séquence ;\↵ Entrée
Permet d'écrire une ligne de commande qui comporte plusieurs commandes, sur plusieurs lignes, une ligne par commande.
Bash ne voyant toujours qu'une seule ligne.
La protection de ↵ Entrée par le caractère de protection \, annule le saut de ligne.

Voir : Le caractère de protection \.
echo $'\e[1m'Debian Facile $'\e[0m' ;\
echo -e "\e[1mMouuai facile\e[0m"
Debian Facile
Mouuai facile
printf "\e[1mDebian Facile\e[0m\n" >/tmp/df
printf %b "\e[1mMouuai facile\e[0m\n" >>/tmp/df
printf \\e[1m%s\\e[0m\\n  Debian Facile >> /tmp/df
cat /tmp/df
Debian Facile
Mouuai facile
Debian
Facile
cat -v /tmp/df
^[[1mDebian Facile^[[0m
^[[1mMouuai facile^[[0m
^[[1mDebian^[[0m
^[[1mFacile^[[0m

Si le fichier /tmp/df n'est pas copié ailleurs, il sera supprimé durant l'arrêt du système.

rm -v /tmp/df
'/tmp/df' supprimé

Conclusions

:-P Avant de partir, un dernier pour la route :

echo "^[[1;37;44mD^[[7mebian^[[27m F^[[7macile^[[0m"

LOL Petit rappel :
Pour que cela fonctionne, il faut changer toutes les séquences des caractères ^[ par :

Lorsque nous utilisons le clavier pour écrire le caractère d'échappement ESC,

L'usage du caractère de contrôle protégé par contre oblique \e et de son interprétation, ne sont plus utiles.
Cela permet de s’affranchir de l'option -e de la commande echo ou du format %b de la commande printf.

Le caractère d'échappement (saisi au clavier) n'est pas un caractère interprété par bash,
Mais reconnu par le terminal utilisé (une console virtuelle ou un terminal fenêtre).
Pour bash, il s'agit d'un simple caractère (de contrôle, non-imprimable).
Il n'a donc pas besoin d'être protégé, ni par le caractère de protection \, ni par l'encadrement des guillemets simples ou doubles.
Et sa protection ne l’empêche pas d'être le caractère d'échappement.

Il permet aussi, d'être écrit dans un éditeur de texte interactif.
echo -e "\e[1;37;44mD\e[7mebian\e[27m F\e[7macile\e[0m"

Cette écriture peut être partagée, en étant simplement recopiée ou en étant copiée/collée.
Mais elle nécessite d'être interprétée par l'interpréteur de commande.


Voir :

1)
N'hésitez pas à y faire part de vos remarques, succès, améliorations ou échecs !
2)
Un terminal est un appareil ou son émulation logicielle, qui permet de communiquer avec un système informatique. Il dispose généralement au moins, d'une entrée pour envoyer des informations au système (par exemple un clavier). Et d'une sortie, pour que le système puisse aussi nous informer (par exemple un écran).
3)
Une console virtuelle est l'un des multiplexages du terminal intégré au (/émulé par le) noyau Linux.
4)
Un terminal fenêtre est un terminal émulé en espace utilisateur, affiché par le système graphique. C'est le terminal obtenu dans une fenêtre, sous un environnement graphique.
5)
Une interface de communication en mode texte permet d'interagir textuellement avec le système. Elle est constituée d'un terminal (l'entrée et la sortie) et par exemple d'un interpréteur de commande.
6)
Un caractère de contrôle est un caractère qui opère un contrôle, pour naviguer dans du texte, mettre en page ou éditer du texte. Ce sont des caractères non-imprimables (qui ne disposent pas de symbole graphique). Ils sont représentés par des séquences de simples caractères imprimables. (fr) Caractère de contrôle (wikipedia.org)
7)
Le code ASCII (American Standard Code for Information Interchange) est une norme qui encode les caractères, en les représentant par un identifiant numérique. Le code ASCII dispose de 128 caractères (de 0 à 127). Les 32 premiers (de 0 à 31) et le dernier (127) sont des caractères de contrôle. Les 96 autres (de 32 à 126) sont les caractères de l'alphabet (minuscules et majuscules), les chiffres, ceux de la ponctuations et autres caractères spéciaux. (fr) American Standard Code for Information Interchange (wikipedia.org)
8)
La commande cat permet d'afficher le contenu de fichier sur la sortie standard. Manuel (fr) cat (1) : Concaténer des fichiers et les afficher sur la sortie standard (manpage.org)