Я знаю, що на це вже відповіли, але відповідь не пояснює, що відбувається.
Символи, як 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
, що (згідно зі сторінкою stty man ) "стерме поточний рядок". Ви також stty
можете змінити це відображення:
stty kill ^E # make ctrl-e erase the line
На цій сторінці є багато чудової інформації про рівень TTY, якщо вас цікавить.
Якщо речі були недостатньо заплутані: коли ви підказуєте інтерактивний запит bash
, ви фактично не перебуваєте в "канонічному" режимі редагування рядків. Натомість bash
отримує кожен символ безпосередньо під час його введення та інтерпретує самі контрольні послідовності через бібліотеку читальних ліній . Ця бібліотека буде вшановувати відображення, які ви встановили на своєму термінальному пристрої, тому ви все одно stty
можете їх змінити. Або ви можете налаштувати їх незалежно всередині bash
інших програм на основі читальної лінії, встановивши unix-line-discard
властивість у вашому ~/.inputrc
файлі. Дивіться сторінку bash man для отримання додаткової інформації.
Коли ви запускаєте програму, ввімкніть bash
повторно канонічний режим редагування рядків ( stty icanon
), якщо він був включений раніше, а потім його знову відключите, коли програма закінчиться ( stty -icanon
).