Если вы делаете:
stty eol =
А затем запустите демонстрацию, предложенную в вашем редакторе , вы увидите строку foo в распечатке test.out . Линейная дисциплина терминала будет сбрасывать свой вывод в читатель, когда он читает каждый специальный символ eol в вашем вводе.
Терминал Linux в каноническом режиме - который может быть настроен stty icanon
или, возможно, просто stty sane
- обрабатывает следующие специальные символы ввода ...
- ВФ
- дефолт:
^D
- Завершает строку ввода и сбрасывает вывод в считыватель. Поскольку он удаляется из ввода, если он вводится как единственный символ в строке, он передается в считыватель как нулевое чтение или конец файла .
- EOL
- по умолчанию: неназначенный
- Также завершает строку ввода, но не удаляется из ввода.
- убийство
- дефолт:
^U
- Стирает весь буферизованный ввод.
- стирание
- по умолчанию:
^H
(или возможно @
или ^?
в некоторых системах)
- Стирает последний буферный символ ввода.
Когда iexten также установлен - как stty icanon iexten
или, опять же, вероятно, просто stty sane
, канонический терминал Linux также будет обрабатывать ...
- EOL2
- по умолчанию: не назначено
- Также также завершает строку ввода и также не удаляется из ввода.
- WERASE
- дефолт:
^W
- Стирает последнее буферизованное входное слово .
- rprnt
- дефолт:
^R
- Перепечатывает весь буферизованный ввод.
- СИМВОЛ
- дефолт:
^V
- Удаляет любое особое значение в отношении линейной дисциплины для непосредственно следующего входного символа.
Эти символы обрабатываются путем удаления их из входного потока - за исключением EOL и EOL2 , то есть - и выполнять соответствующую специальную функцию перед передачей обработанного потока для читателя - который, как правило , в оболочке, но может быть все , что группа процессов переднего плана ,
Другие специальные входные символы, которые обрабатываются аналогичным образом, но могут быть настроены независимо от любого параметра icanon, включают набор isig - set like stty isig
и, вероятно, также включены в нормальную конфигурацию:
- уволиться
- дефолт:
^\
- Сбрасывает весь буферизованный ввод (если noflsh не задан) и отправляет SIGQUIT в группу процессов переднего плана - вероятно, генерируя дамп ядра.
- сусп
- дефолт:
^Z
- Очищает все буферизованные входные данные (если noflsh не установлен) и отправляет SIGTSTP в группу процессов переднего плана. Приостановленная группа процессов, вероятно, может быть возобновлена с помощью
kill -CONT "$!"
или только fg
в (- set -m
) управляемой заданием оболочке.
- ВВЕДЕНИ
- дефолт:
^C
- Очищает весь буферизованный ввод (если noflsh не установлен) и отправляет SIGINT в группу процессов переднего плана.
И набор ixon - настроен как stty ixon
и также обычно включается в нормальный конфиг:
- стоп
- дефолт:
^S
- Останавливает весь вывод в считыватель до тех пор, пока либо не будет прочитано начало при вводе, либо - когда также установлена ixany - будет прочитан хотя бы еще один символ.
- Начало
- дефолт:
^Q
- Перезапускает вывод, если он был ранее остановлен с остановкой .
- И обработчик останова, и запуск удаляются из ввода при обработке, но если выход перезапускается из-за какого-либо символа на входе, когда установлен ixany, то этот символ не удаляется.
Специальные символы, обрабатываемые в других системах, отличных от Linux, могут включать ...
- румянец
- дефолт:
^O
- Переключает сброс и сброс буферизованного ввода и удаляется из ввода.
- DSUSP
- по умолчанию: не назначено
- Очищает все буферизованные входные данные только тогда, когда считыватель читает назначенный специальный символ ввода и затем отправляет SIGTSTP.
И возможно ...
- swtch
- по умолчанию
^@
(значение \0
или NUL
)
- Переключение переднего слоя оболочки. Для использования с приложением
shl
shell-layer в некоторых системах.
- Реализация,
shl
которая мультиплексирует ptys и, следовательно, совместима с управлением заданиями, а не с зависимым от swtch поведением оригинальной реализации, может свободно использоваться в heirloom-toolchest
наборе инструментов.
Для более ясного представления о том, как и почему (и, возможно, почему нет) эти функции ввода обрабатываются, обратитесь к man 3 termios
.
Все вышеперечисленные функции могут быть назначены (или переназначены) - если применимо - как stty
function assigned-key
. Чтобы отключить любую функцию, сделайте . В качестве альтернативы, поскольку различные попытки с назначениями для любой из вышеупомянутых функций редактирования строк со всеми реализациями GNU, AST или семейной реликвии, по- видимому, указывают, вы также можете, поскольку назначение NUL для любой функции, по-видимому, равносильно установке его как неназначенного в моем linux система.stty
function
^-
stty
stty
function
^@
Возможно, вы видите эхо этих символов при их вводе (что, вероятно, можно настроить с помощью [ / ] ctlecho ) , но это всего лишь маркер, показывающий, где вы работали - программа, получающая ваши данные, не имеет представления о том, что вы набрал их (исключая eol [2] , то есть) и получил только копию вашего ввода, к которому дисциплина применяет свои эффекты.
Следствием того, что терминал обрабатывает различные функции редактирования строк, является то, что ему необходимо в некоторой степени буферизовать ввод для того, чтобы воздействовать на функции, которые вы указываете ему, что он должен, - и поэтому не может быть неограниченной подачи ввода, которая Вы можете в любое время убить . Линия буфер более точно убить буфера.
Если вы установите Eol или EOL2 символы в какой - то разделитель , который происходит на входе - даже если ни один не символ перевода строки или возврата символов, например , - тогда вы будете только в состоянии убить до такой степени , что это в последний раз произошло и ваш убить буфер будет расширяться, насколько это возможно, до тех пор, пока следующая из них - или новая строка (или возврат, если icrnl установлен, а igncr - нет) - не появится на входе.