¿Por qué aparece ^ C, ^ V, etc. en el terminal cuando uso el atajo de teclado Ctrl + carácter?


26

A veces, al copiar y pegar texto de la salida de comandos, accidentalmente uso Ctrl+ en clugar de Ctrl+ Shift+ c.

Entonces la línea de comandos lo interpreta como ^C...

¿Por qué es esto? ¿Por qué la línea de comandos interpreta la controlentrada como ^?

Respuestas:


35

En realidad no inserta la secuencia de caracteres "^ C". Esto es solo una representación de caracteres de control ASCII no imprimibles, como:

  • ^C → ETX (Fin del texto, envía una señal de apagado), ASCII 0x03
  • ^D → EOT (Fin de la transmisión, termina la entrada), ASCII 0x04
  • ^H→ BS (Retroceso, \b), ASCII 0x08
  • ^J→ LF (avance de línea \n), ASCII 0x0A
  • ^L → FF (alimentación de formulario, nueva página, borra el terminal), ASCII 0x0C
  • ^M→ CR (retorno de carro \r), ASCII 0x0D

Esto es solo un pequeño extracto de posibles caracteres de control ASCII que se pueden insertar usando el teclado; Puedes encontrar una lista completa aquí .

Creo que los más importantes para recordar son Ctrl+ C, Ctrl+ Dy Ctrl+ L.


El uso del ^símbolo de intercalación como símbolo de "control" se remonta a tiempos pre-gráficos cuando las terminales eran solo de texto, y creo que incluso antes de eso, cuando teníamos tarjetas y papel, no había terminales. Me encantaría saber por qué se eligió el símbolo de intercalación.
Paddy Landau

8

Debido a que el terminal interpreta los combos CTRL+ KEYcomo caracteres ASCII no imprimibles, y al ser esos no imprimibles, necesita una forma de representarlos.

La convención, derivada de terminales VT con soporte ANSI , es representar el combo CTRL+ que KEYrepresenta CTRLcon un cursor ( ^) y KEYcon KEY.


5

Al copiar y pegar a / desde un terminal, es una buena práctica usar los atajos Ctrl+ Inserty Shift+ Insertrespectivamente.

Estos son los atajos más tradicionales para el uso de terminales, aunque notará que en un entorno gráfico X Ctrl+ Inserty Shift+ Insertestán vinculados a los mismos Ctrl+ Cy Ctrl+ V.

En la mayoría de los terminales Ctrl+ C(representados por ^C) se utilizan para detener la ejecución de un proceso, por lo tanto, pegar con ese atajo no funcionará.

Para copiar y pegar rápidamente, puede utilizar el búfer primario de X resaltando el texto que desea copiar y luego haciendo clic con el botón central en el lugar donde desea pegarlo. No se requiere teclado.


2
Lo siento, pero entendiste mal la pregunta. OP quería saber por qué ^Caparecen las cadenas o similares al presionar CTRL + C (o CTRL + otra letra). No se trata de cómo copiar y pegar correctamente cosas en el terminal, para lo cual su respuesta sería excelente.
Byte Commander

@ByteCommander, ¡tienes razón! Mis disculpas, dejaré mi respuesta como está, sin embargo, ya que parece que la pregunta ya se ha respondido correctamente :) Alguien podría tropezar con esto y encontrar útil lo que escribí.
Keefer Rourke

-2

Usted debe estar utilizando Ctrl+ Cy no Shift+ Ctrl+ C, ya que en la línea de comandos, que hacen lo mismo (y Ctrl+ Ces más fácil que Shift+ Ctrl+ C). Eso podría no ser cierto en ciertos entornos gráficos donde la GUI captura algunas teclas y hace algo especial, pero si las teclas se envían realmente a la línea de comando, entonces no hay diferencia. Esta es la razón por la que presionar Ctrl+ Cpuede mostrar ^ C como una C mayúscula, en lugar de una C minúscula. La línea de comando no hace distinción sobre cuál presionó (y supuestamente se consideró que las mayúsculas eran más fáciles de leer). Esto es cierto para las letras; para otros personajes, Shiftpuede tener un efecto).

Al presionar Ctrl: Cenvía el código ASCII que está 64 por debajo de la posición de la letra mayúscula en la tabla ASCII (y 96 menos que la posición de la letra minúscula en la tabla ASCII). Entonces, presionar Ctrl- c(en minúsculas) envía el código ASCII 3 (que es 64 menos que Cel código ASCII de capital de 67). En muchos entornos, puede mantener presionado Alty luego presionar 3el teclado numérico (y luego soltar la 3tecla y luego soltar la Alttecla) y puede obtener el mismo efecto.

Con respecto a ^ C, ^ es solo una abreviatura conocida para la Ctrltecla " ". Del mismo modo, M- es una abreviatura de la Alttecla " ". Err, si. M significa la palabra "Meta", que se puede ingresar manteniendo Altpresionado y presionando lo que viene después, o algunas veces presionando Esc(y soltando Esc) y luego presionando lo que viene después. El artículo de Wikipedia sobre "Clave de control": la sección "Notación" describe esto como "Notación tradicional". Esto también se conoce como notación Caret ( artículo de Wikipedia sobre notación Caret , Unix StackExchange: pregunta de ryvnf sobre notación Caret ).

Con respecto a la última pregunta, el shell de comandos no está "interpretando" nada para ser un descuido. En otras palabras, el caparazón no lee nada y cree que es un descuido. Lo que está sucediendo es que el shell está utilizando la notación de intercalación conocida para la salida. Como otro ejemplo, puede ver el conocido localizador "menos", use la notación de interrelación ejecutando:dd if=/dev/zero bs=64 count=1 | less

(El editor de texto "nano" también usa notación de intercalación en su ayuda en línea, incluidas las pantallas completas de ayuda en línea que se muestran después de presionar ^ G, también conocido como Ctrl- g).


44
DevRobot está preguntando específicamente sobre el uso de Ctrl-C (o más bien Shift-Ctrl-C) en el contexto de copiar y pegar, lo que implica un terminal GUI. No es necesariamente incorrecto, pero su explicación es definitivamente confusa para alguien que viene desde una perspectiva de usuario GUI.
RM
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.