¿Está literalmente "terminando un archivo" al ingresar esta secuencia de escape, es decir, la sesión de shell interactiva es vista como un flujo de archivo real por el shell, como cualquier otro flujo de archivos? Si es así, ¿qué archivo?
¿O la señal Ctrl+ es Dsolo un marcador de posición que significa "el usuario ha terminado de proporcionar información y usted puede finalizar"?
shell
escape-characters
Geeb
fuente
fuente

set -o ignoreeofpara cambiar ese comportamiento.Respuestas:
El
^Dcarácter (también conocido como\04o 0x4, FIN DE LA TRANSMISIÓN en Unicode) es el valor predeterminado para eleofparámetro de carácter de control especial del controlador de terminal o pseudo-terminal en el núcleo (más precisamente de lattydisciplina de línea asociada al serial o pseudo- dispositivo tty ). Ese es elc_cc[VEOF]de latermiosestructura pasada a los TCSETS / TCGETSioctluno cuestiones al dispositivo terminal para afectar el comportamiento del conductor.El comando típico que envía esos
ioctlses elsttycomando.Para recuperar todos los parámetros:
Ese
eofparámetro solo es relevante cuando el dispositivo terminal está enicanonmodo.En ese modo, el controlador de terminal (no el emulador de terminal) implementa un editor de línea muy simple , donde puede escribir Backspacepara borrar un carácter, Ctrl-Upara borrar toda la línea ... Cuando una aplicación lee desde el dispositivo terminal, no ve nada hasta presiona Returnen qué punto
read()devuelve la línea completa, incluido el últimoLFcarácter (de forma predeterminada, el controlador de terminal también traduce elCRenviado por su terminal ReturnaLF).Ahora, si desea enviar lo que escribió hasta ahora sin presionar Enter, ahí es donde puede ingresar el
eofcarácter. Al recibir ese carácter del emulador de terminal, el controlador de terminal envía el contenido actual de la línea, de modo que la aplicación que lo hagareadlo recibirá tal cual (y no incluirá unLFcarácter final ).Ahora, si la línea actual estaba vacía, y siempre que la aplicación haya leído completamente las líneas ingresadas anteriormente,
readdevolverá el carácter 0.Eso significa el final del archivo para la aplicación (cuando lees desde un archivo, lees hasta que no hay nada más que leer). Es por eso que se llama el
eofcarácter, porque enviarlo hace que la aplicación vea que no hay más entradas disponibles.Ahora, los shells modernos, a su solicitud, no configuran el terminal en
icanonmodo porque implementan su propio editor de línea, que es mucho más avanzado que el controlador de terminal incorporado. Sin embargo, en su propio editor de línea , para evitar confundir a los usuarios, le dan al^Dpersonaje (o lo que sea laeofconfiguración del terminal con algunos) el mismo significado (para significareof).fuente
CTRL_D es solo una señal que dice que este es el final de una secuencia de texto. No termina un archivo con él, finaliza su flujo de entrada al escribirlo. Además, CTRL_D no representa ningún carácter o byte, como puede descubrir con la herramienta hexdump:
fuente