Si lo haces:
stty eol =
Y luego ejecute la demostración sugerida en su EDIT , verá la barra de información en la impresión de test.out . La disciplina de línea del terminal vaciará su salida a su lector a medida que lea cada charol especial en su entrada.
Un terminal de modo canónico de Linux, como se puede configurar con stty icanon
o probablemente solo stty sane
, maneja los siguientes caracteres de entrada especiales ...
- eof
- defecto:
^D
- Termina una línea de entrada y descarga la salida al lector. Debido a que se elimina de la entrada, si se ingresa como el único carácter en una línea, se pasa como una lectura nula , o al final del archivo , al lector.
- eol
- predeterminado: sin asignar
- También termina una línea de entrada, pero no se elimina de la entrada.
- matar
- defecto:
^U
- Borra todas las entradas almacenadas en el búfer.
- borrar
- predeterminado:
^H
(o posiblemente @
o ^?
en algunos sistemas)
- Borra el último carácter de entrada almacenado en el búfer.
Cuando iexten también está configurado, como stty icanon iexten
, o nuevamente, probablemente solo stty sane
, un terminal canónico de Linux también manejará ...
- eol2
- predeterminado: sin asignar
- También también termina una línea de entrada y tampoco se elimina de la entrada.
- borrar
- defecto:
^W
- Borra la última palabra de entrada almacenada en el búfer .
- rprnt
- defecto:
^R
- Reimprime todas las entradas almacenadas en búfer.
- a continuación
- defecto:
^V
- Elimina cualquier significado especial en lo que respecta a la disciplina de línea para el carácter de entrada inmediatamente siguiente.
Estos caracteres se manejan eliminándolos de la secuencia de entrada, a excepción de eol y eol2 , es decir, y realizando la función especial asociada antes de pasar la secuencia procesada al lector, que generalmente es su shell, pero podría ser cualquier grupo de procesos en primer plano .
Otros caracteres de entrada especiales que se manejan de manera similar pero que se pueden configurar independientemente de cualquier configuración de icanon incluyen el conjunto de isig , configurado como stty isig
y probablemente también incluido en una configuración sensata :
- dejar
- defecto:
^\
- Vacía toda la entrada almacenada en el búfer (si noflsh no está configurado) y envía SIGQUIT al grupo de procesos en primer plano, lo que probablemente genere un volcado del núcleo.
- susp
- defecto:
^Z
- Vacía toda la entrada almacenada en el búfer (si noflsh no está configurado) y envía SIGTSTP al grupo de procesos en primer plano. El grupo de procesos suspendido probablemente se puede reanudar con cualquiera de
kill -CONT "$!"
o fg
en un ( set -m
) shell controlado por trabajo.
- intr
- defecto:
^C
- Vacía toda la entrada almacenada en el búfer (si noflsh no está configurado) y envía SIGINT al grupo de procesos en primer plano.
Y el conjunto ixon , configurado como stty ixon
y también generalmente incluido en una configuración sensata :
- detener
- defecto:
^S
- Detiene toda la salida al lector hasta que se lee el inicio en la entrada o, cuando ixany también está configurado, se lee al menos un carácter más.
- comienzo
- defecto:
^Q
- Reinicia la salida si se ha detenido previamente con stop .
- Tanto la detención como el inicio se eliminan de la entrada cuando se procesan, pero si la salida se reinicia debido a cualquier carácter en la entrada cuando se establece ixany , ese carácter no se elimina.
Los caracteres especiales manejados en otros sistemas que no son Linux pueden incluir ...
- rubor
- defecto:
^O
- Alterna el descarte y el vaciado de la entrada almacenada en búfer y se elimina de la entrada.
- dsusp
- predeterminado: sin asignar
- Vacía todas las entradas almacenadas solo cuando el lector lee el carácter de entrada especial asignado y luego envía SIGTSTP.
Y posiblemente...
- swtch
- predeterminado
^@
(significado \0
o NUL
)
- Cambia las capas de concha en primer plano. Para usar con la aplicación de
shl
capas de shell en algunos sistemas.
- Una implementación
shl
que multiplexa ptys y, por lo tanto, es compatible con el control del trabajo en lugar del comportamiento dependiente de swtch de la implementación original se puede tener libremente en el heirloom-toolchest
conjunto de herramientas.
Para obtener una imagen más clara de cómo y por qué (y quizás por qué no) se manejan estas funciones de entrada, consulte man 3 termios
.
Todas las funciones anteriores se pueden asignar (o reasignar) , cuando corresponda, como stty
function assigned-key
. Para deshabilitar cualquier función individual, haga . Alternativamente, como varios intentos con asignaciones para cualquiera de las funciones de edición de líneas mencionadas anteriormente con todas las implementaciones de GNU, AST o reliquia parecen indicar, también puede, como la asignación NUL para cualquier función parece ser equivalente a configurarla como no asignada en mi Linux sistema.stty
function
^-
stty
stty
function
^@
Probablemente ve un eco de estos caracteres cuando los escribe (como se puede configurar probablemente con [-] ctlecho ) , pero esto es solo un marcador que le muestra dónde lo hizo: el programa que recibe su entrada no tiene noción de que usted los escribió (excepto eol [2] , es decir) y recibe solo una copia de su entrada a la que la disciplina de línea ha aplicado sus efectos.
Una consecuencia del manejo por parte del terminal de las diversas funciones de edición de línea es que debe necesitar un buffer de entrada hasta cierto punto para actuar sobre las funciones que le indique que debería, y por lo tanto no puede haber un suministro ilimitado de entrada que podrías matar en cualquier momento . El buffer de línea es más precisamente el buffer de eliminación .
Si establece los caracteres eol o eol2 en algún delimitador que se produce en la entrada, incluso si ninguno es una línea nueva o un carácter de retorno, por ejemplo, solo podrá matar hasta el punto en que ocurrió por última vez y su búfer de muerte se extenderá tanto como sea posible hasta que se produzca el siguiente de estos, o una nueva línea (o regrese si icrnl está configurado y no está activado igncr ) en la entrada.