Ctrl + 4 envía ^ \
Los terminales envían caracteres (o más precisamente bytes), no claves. Cuando se presiona una tecla que representa un carácter imprimible, el terminal envía ese carácter a la aplicación. La mayoría de las teclas de función están codificadas como secuencias de escape: secuencias de caracteres que comienzan con el número de carácter 27. Algunos teclados de la forma Ctrl+ character, y algunas teclas de función, se envían como caracteres de control, en el conjunto de caracteres ASCII , que todas las computadoras modernas utilizar como base (Unicode, ISO Latin- n, etc. son todos superconjuntos de ASCII), 33 caracteres son caracteres de control: caracteres del 0 al 31 y 127. Los caracteres de control no se pueden imprimir, pero tienen la intención de tener un efecto en las aplicaciones; por ejemplo, el carácter 10, que es Control-J (comúnmente escrito ^ J), es un carácter de nueva línea, por lo que cuando un terminal muestra ese carácter, mueve el cursor a la siguiente línea, en lugar de mostrar un glifo. El carácter de escape en sí es un carácter de control, ^ [(valor 27).
No hay suficientes caracteres de control para cubrir todos los Ctrl+ characterteclados. Solo las letras y los caracteres @[\]^_?
tienen un carácter de control correspondiente. Cuando presiona Ctrl+ 4o Ctrl+ $(que supongo es Ctrl+ Shift+ 4), el terminal tiene que elegir algo para enviar. Dependiendo del terminal y su configuración, hay varias posibilidades comunes:
- El terminal ignora el Ctrlmodificador y envía el carácter
4
o $
.
- El terminal envía una secuencia de escape que codifica la tecla exacta y los modificadores que se presionaron.
- El terminal envía algún otro carácter de control.
Muchos terminales envían caracteres de control para algunas teclas en la fila de dígitos:
- Ctrl+ 2→ ^ @
- Ctrl+ 3→ ^ [
- Ctrl+ 4→ ^ \
- Ctrl+ 5→ ^]
- Ctrl+ 6→ ^^
- Ctrl+ 7→ ^ _
- Ctrl+ 8→ ^?
No sé de dónde surgió esta convención en particular.
Ctrl+ |envía el mismo carácter porque es Ctrl+ Shift+ \y el terminal envía ^ \ tanto si se presionó la tecla Mayús como si no.
^ \ renuncia
El terminal en sí (más precisamente, el soporte de terminal genérico en el núcleo) interpreta algunos caracteres de control especialmente. Esta interpretación puede configurarse para mapear diferentes caracteres o puede ser desactivada por aplicaciones que desean procesar los caracteres por sí mismos. Una interpretación bien conocida es que ^ M, el carácter enviado por la Returntecla, envía la línea actual a la aplicación, si el terminal está en modo cocinado , en el que las aplicaciones reciben la entrada línea por línea.
Algunos caracteres envían señales a la aplicación en primer plano. ^ C envía la señal de interrupción (SIGINT), que convencionalmente le dice a la aplicación que pare lo que está haciendo y lea el siguiente comando del usuario. Las aplicaciones no interactivas suelen salir. ^ \ envía la señal de salida (SIGQUIT), que convencionalmente le dice a la aplicación que salga lo antes posible sin guardar nada; muchas aplicaciones no anulan el comportamiento predeterminado, que es matar la aplicación de inmediato¹. Entonces, cuando presiona Ctrl+ 4(o cualquier cosa que envíe el carácter ^ \) en cat
o bc
, ninguno de los cuales anula el comportamiento predeterminado, la aplicación se cierra.
El terminal en sí imprime la ^\
parte del mensaje: es una representación visual del carácter que escribió, y el terminal está en modo cocinado y con eco activado (el terminal muestra los caracteres tan pronto como los escribe, en lugar de modo sin eco donde los caracteres solo se envían a la aplicación, que puede o no elegir mostrarlos). La Quit
parte proviene de bash: se da cuenta de que su proceso hijo murió por una señal de abandono, y esa es su forma de avisarle.
Los shells manejan todas las señales comunes, de modo que si escribe ^ \ en un shell, no cancela su sesión, solo obtiene un nuevo aviso, igual que ^ C.
Puedes jugar con la configuración del terminal con el stty
comando.
¹ Y tradicionalmente genera un volcado de núcleo , pero muchos sistemas lo deshabilitan por defecto en la actualidad.