Я знаю, что на это уже ответили, но ответ не объясняет, что происходит.
Символы, такие как Ctrl+ L, обрабатываются приложением . В случае ввода ввода в оболочку, вроде бы bash
, он очищает экран. Некоторые приложения, например emacs
, используют его для перерисовки экрана и / или повторного центрирования курсора.
Символы, такие как Ctrl+ Uв приглашении пароля, обрабатываются дисциплиной линии TTY . Они будут работать всякий раз, когда входной терминал находится в «каноническом» режиме редактирования строки, в котором находятся ваши программы, когда вы вводите пароль. В этом режиме само ядро Linux интерпретирует эти символы. Вы можете увидеть, какие функции назначены каким клавишам на выходе stty -a
:
speed 38400 baud; rows 45; columns 128; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>; eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S;
susp = ^Z; rprnt = ^R; werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd cs8 -hupcl -cstopb cread -clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff -iuclc -ixany -imaxbel iutf8
opost -olcuc -ocrnl onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten echo echoe echok -echonl -noflsh -xcase -tostop -echoprt echoctl echoke
Здесь вы можете видеть, что Ctrl+ Uсвязан с kill
, который (согласно man-странице stty ) будет «стирать текущую строку». Вы также можете использовать stty
для изменения этого отображения:
stty kill ^E # make ctrl-e erase the line
На этой странице есть много полезной информации о слое TTY, если вам интересно.
Если вещи не были достаточно запутанными: когда по приглашению интерактива bash
, вы на самом деле не в «каноническом» режиме редактирования строки. Вместо этого bash
он получает каждый символ непосредственно по мере его ввода и интерпретирует сами управляющие последовательности через библиотеку readline . Эта библиотека будет учитывать сопоставления, которые вы установили на своем оконечном устройстве, так что вы все равно можете использовать их stty
для изменения. Или вы можете настроить их независимо друг от друга внутри bash
и в других программах на основе readline, установив unix-line-discard
свойство в вашем ~/.inputrc
файле. Смотрите страницу руководства bash для получения дополнительной информации.
При запуске программы bash
повторно включите режим редактирования канонической строки ( stty icanon
), если он был включен ранее, а затем снова отключите его, когда программа завершит работу ( stty -icanon
).