Pourquoi ^ C, ^ V etc. apparaissent-ils dans le terminal lorsque j'utilise le raccourci clavier Ctrl + caractère?


26

Parfois, lors du copier-coller du texte de la sortie des commandes, j'utilise accidentellement Ctrl+ cau lieu de Ctrl+ Shift+ c.

Ainsi, la ligne de commande l'interprète comme ^C...

Pourquoi est-ce? Pourquoi la ligne de commande interprète-t-elle l' controlentrée comme ^?

Réponses:


35

Il n'insère pas réellement la séquence de caractères "^ C". Il s'agit uniquement d'une représentation des caractères de contrôle ASCII non imprimables, tels que:

  • ^C → ETX (fin du texte, envoie un signal d'arrêt), ASCII 0x03
  • ^D → EOT (fin de transmission, termine l'entrée), ASCII 0x04
  • ^H→ BS (Backspace, \b), ASCII 0x08
  • ^J→ LF (saut de ligne, \n), ASCII 0x0A
  • ^L → FF (Flux de formulaire, nouvelle page, efface le terminal), ASCII 0x0C
  • ^M→ CR (retour chariot, \r), ASCII 0x0D

Ceci n'est qu'un petit extrait des caractères de contrôle ASCII possibles qui peuvent être insérés à l'aide du clavier; vous pouvez trouver une liste complète ici .

Je pense que les plus importants à retenir sont Ctrl+ C, Ctrl+ Det Ctrl+ L.


L'utilisation du ^signe d' insertion comme symbole de «contrôle» remonte à l'époque pré-graphique lorsque les terminaux étaient uniquement en texte, et je pense qu'avant même lorsque nous avions des cartes et du papier, pas de terminaux. J'aimerais savoir pourquoi le signe d'insertion a été choisi comme symbole.
Paddy Landau

8

Parce que les combos CTRL+ KEYsont interprétés par le terminal comme des caractères ASCII non imprimables, et étant ces caractères non imprimables, vous avez besoin d'un moyen de les représenter.

La convention, issue des terminaux VT avec support ANSI , est de représenter le combo CTRL+ KEYreprésentant CTRLavec un caret ( ^) et KEYavec KEY.


5

Lorsque vous copiez et collez vers / depuis un terminal, il est recommandé d'utiliser respectivement les raccourcis Ctrl+ Insertet Shift+ Insert.

Ce sont les raccourcis les plus traditionnels pour l'utilisation du terminal, mais vous remarquerez que dans un environnement graphique X Ctrl+ Insertet Shift+ Insertsont liés aux mêmes Ctrl+ Cet Ctrl+ V.

Dans la plupart des terminaux, Ctrl+ C(représenté par ^C) est utilisé pour arrêter l'exécution d'un processus, donc coller avec ce raccourci ne fonctionnera pas.

Pour copier et coller rapidement, vous pouvez utiliser le tampon principal de X en mettant en surbrillance le texte que vous souhaitez copier, puis en cliquant avec le bouton central à l'endroit où vous souhaitez le coller. Aucun clavier requis.


2
Désolé, mais vous avez mal compris la question. OP voulait savoir pourquoi la chaîne ^Cou des chaînes similaires apparaissent lorsque vous appuyez sur CTRL + C (ou CTRL + une autre lettre). Il ne s'agit pas de copier et coller correctement des éléments dans le terminal, pour lesquels votre réponse serait excellente.
Byte Commander

@ByteCommander, vous avez raison! mes excuses, je vais laisser ma réponse telle quelle, car il semble que la question ait déjà été correctement répondue :) Quelqu'un pourrait tomber dessus et trouver ce que j'ai écrit utile.
Keefer Rourke

-2

Vous devriez utiliser Ctrl+ Cet non Shift+ Ctrl+ C, car sur la ligne de commande, ils font la même chose (et Ctrl+ Cest plus facile que Shift+ Ctrl+ C). Cela peut ne pas être vrai dans certains environnements graphiques où l'interface graphique capture certaines touches et fait quelque chose de spécial, mais si les touches sont vraiment envoyées à la ligne de commande, alors il n'y a pas de différence. C'est pourquoi appuyer sur Ctrl+ Cpeut afficher ^ C comme un C majuscule, au lieu d'un C. minuscule. La ligne de commande ne fait aucune distinction sur celui que vous avez appuyé (et les majuscules ont probablement été jugées plus faciles à lire). Cela est vrai pour les lettres; pour les autres personnages, le Shiftpeut avoir un effet.)

Appuyez sur Ctrl- Cenvoie le code ASCII qui est 64 en dessous de la position de la lettre majuscule dans la table ASCII (et 96 de moins que la position de la lettre minuscule dans la table ASCII). Donc, appuyer sur Ctrl- c(en minuscules) envoie le code ASCII 3 (qui est 64 de moins que Cle code ASCII capital de 67). Dans de nombreux environnements, vous pouvez maintenir enfoncé Altpuis appuyer 3sur le pavé numérique (puis relâcher la 3touche, puis relâcher la Alttouche) et vous pouvez obtenir le même effet.

En ce qui concerne ^ C, le ^ est juste un raccourci bien connu pour la Ctrltouche " ". De même, M- est un raccourci pour la Alttouche " ". Euh, ouais. M signifie le mot "Meta", qui peut être entré en maintenant Altenfoncé et en appuyant sur ce qui vient ensuite, ou parfois en appuyant Esc(et relâchant Esc) puis en appuyant sur tout ce qui vient ensuite. L'article de Wikipedia sur "Clé de contrôle": la section "Notation" décrit cela comme une "notation traditionnelle". Ceci est également connu comme la notation Caret ( article de Wikipedia sur la notation Caret , Unix StackExchange: la question de ryvnf sur la notation Caret ).

En ce qui concerne la dernière question, le shell de commande "n'interprète" rien comme un signe d'insertion. En d'autres termes, le shell ne lit rien et croit qu'il s'agit d'un curseur. Ce qui se passe, c'est que le shell utilise la notation caret bien connue pour la sortie. Comme autre exemple, vous pouvez voir le pager bien connu, "less", utiliser la notation caret en exécutant:dd if=/dev/zero bs=64 count=1 | less

(L'éditeur de texte "nano" utilise également la notation caret dans son aide en ligne, y compris les écrans complets de l'aide en ligne affichés après avoir appuyé sur ^ G, alias Ctrl- g.)


4
DevRobot pose spécifiquement des questions sur l'utilisation de Ctrl-C (ou plutôt Shift-Ctrl-C) dans le contexte du copier-coller, ce qui implique un terminal GUI. Vous n'êtes pas nécessairement incorrect, mais votre explication est certainement déroutante pour quelqu'un venant du point de vue d'un utilisateur GUI.
RM
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.