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.
less
ovim
. Tenga en cuenta quecmd | less
, enCTRL-C
general, matacmd
(mientrasless
se maneja para cancelar la acción actual (como una búsqueda)) (continuación)Además de la respuesta de Gilles, permítanme agregar que siempre pueden ingresar caracteres no imprimibles en bash con Ctrl-v+ key( Ctrl-v+ Ctrl+4en este caso) y verificar el código de caracteres con
obtienes el código decimal del carácter, que como puedes comprobar
man ascii
corresponde al separador de archivos (FS) .fuente
printf '%d\n' '"^\'
:?