Ctrl + 4 envoie ^ \
Les terminaux envoient des caractères (ou plus précisément des octets), pas des clés. Lorsqu'une touche représentant un caractère imprimable est enfoncée, le terminal envoie ce caractère à l'application. La plupart des touches de fonction sont codées comme des séquences d'échappement: des séquences de caractères qui commencent par le numéro de caractère 27. Certains accords de touches de la forme Ctrl+ character, et quelques touches de fonction, sont envoyés en tant que caractères de contrôle - dans le jeu de caractères ASCII , que tous les ordinateurs modernes utiliser comme base (Unicode, ISO Latin- n, etc. sont tous des sur-ensembles ASCII), 33 caractères sont des caractères de contrôle: les caractères 0 à 31 et 127. Les caractères de contrôle ne sont pas imprimables, mais destinés à avoir un effet dans les applications; par exemple, le caractère 10, qui est Control-J (généralement écrit ^ J), est un caractère de nouvelle ligne, donc lorsqu'un terminal affiche ce caractère, il déplace le curseur sur la ligne suivante, plutôt que d'afficher un glyphe. Le caractère d'échappement lui-même est un caractère de contrôle, ^ [(valeur 27).
Il n'y a pas suffisamment de caractères de contrôle pour couvrir tous les accords Ctrl+ characterclés. Seules les lettres et les caractères @[\]^_?
ont un caractère de contrôle correspondant. Lorsque vous appuyez sur Ctrl+ 4ou Ctrl+ $(ce qui, je suppose, est Ctrl+ Shift+ 4), le terminal doit choisir quelque chose à envoyer. Selon le terminal et sa configuration, il existe plusieurs possibilités communes:
- Le terminal ignore le Ctrlmodificateur et envoie le caractère
4
ou $
.
- Le terminal envoie une séquence d'échappement qui code la touche exacte et les modificateurs qui ont été enfoncés.
- Le terminal envoie un autre caractère de contrôle.
De nombreux terminaux envoient des caractères de contrôle pour certaines touches de la ligne des chiffres:
- Ctrl+ 2→ ^ @
- Ctrl+ 3→ ^ [
- Ctrl+ 4→ ^ \
- Ctrl+ 5→ ^]
- Ctrl+ 6→ ^^
- Ctrl+ 7→ ^ _
- Ctrl+ 8→ ^?
Je ne sais pas d'où vient cette convention particulière.
Ctrl+ |envoie le même caractère car c'est Ctrl+ Shift+ \et le terminal envoie ^ \ que la touche Maj ait été enfoncée ou non.
^ \ quitte
Le terminal lui-même (plus précisément, le support de terminal générique dans le noyau) interprète spécialement quelques caractères de contrôle. Cette interprétation peut être configurée pour mapper différents caractères ou désactivée par les applications qui souhaitent traiter les caractères par eux-mêmes. Une telle interprétation bien connue est que ^ M, le caractère envoyé par la Returntouche, envoie la ligne courante à l'application, si le terminal est en mode cuit , dans lequel les applications reçoivent l'entrée ligne par ligne.
Quelques caractères envoient des signaux à l'application au premier plan. ^ C envoie le signal d'interruption (SIGINT), qui indique classiquement à l'application d'arrêter ce qu'elle fait et de lire la prochaine commande de l'utilisateur. Les applications non interactives se terminent généralement. ^ \ envoie le signal de sortie (SIGQUIT), qui indique classiquement à l'application de quitter le plus tôt possible sans rien enregistrer; de nombreuses applications ne remplacent pas le comportement par défaut, qui consiste à tuer l'application immédiatement¹. Ainsi, lorsque vous appuyez sur Ctrl+ 4(ou sur tout élément qui envoie le caractère ^ \) dans cat
ou bc
, qui ne remplace pas le comportement par défaut, l'application est supprimée.
Le terminal lui-même imprime la ^\
partie du message: c'est une représentation visuelle du caractère que vous avez tapé, et le terminal est en mode cuit et avec l'écho activé (les caractères sont affichés par le terminal dès que vous les tapez, par opposition à mode non-écho où les caractères ne sont envoyés qu'à l'application, qui peut ou non choisir de les afficher). La Quit
partie vient de bash: elle remarque que son processus enfant est mort à partir d'un signal d'arrêt, et c'est sa façon de vous le faire savoir.
Les shells gèrent tous les signaux courants, de sorte que si vous tapez ^ \ dans un shell, vous ne tuez pas votre session, vous obtenez simplement une nouvelle invite, identique à ^ C.
Vous pouvez jouer avec les paramètres du terminal avec la stty
commande.
¹ Et génèrent traditionnellement un vidage de mémoire , mais de nombreux systèmes le désactivent par défaut de nos jours.
less
ouvim
. Notez que danscmd | less
,CTRL-C
tue généralementcmd
(alors queless
c'est géré pour annuler l'action en cours (comme une recherche)) (suite)En plus de la réponse de Gilles, permettez-moi d'ajouter que vous pouvez toujours saisir des caractères non imprimables en bash avec Ctrl-v+ key( Ctrl-v+ Ctrl+4dans ce cas) et vérifier le code de caractère avec
vous obtenez le code décimal du caractère qui, comme vous pouvez le vérifier,
man ascii
correspond au séparateur de fichiers (FS) .la source
printf '%d\n' '"^\'
:?