Очистити / стерти помилково введений невидимий пароль на оболонці / терміналі в Linux


75

Одне, що дратує мене за допомогою терміналу Linux, - це коли мені доведеться вводити невидимий пароль, наприклад, коли ви запускаєте ssh . Іноді я вводячи помилку в одну або кілька літер, і тоді мені доведеться кілька разів натиснути клавішу зворотного простору, щоб переконатися, що я стерла все, щоб почати заново.

Я знаю, що це не велика справа, але оскільки на днях я дізнався, що натисканням CTRL + L "очищає" термінал, мені було цікаво, чи є спосіб очистити / стерти невидимий пароль, не покладаючись на звороту простору або натискаючи клавішу Enter для спробуйте ще раз.

Відповіді:


70

Вам просто потрібно набрати ctrl+ u.

Насолоджуйтесь =)


Ніколи про це не знав. Зазвичай я просто ctrl + C з небажаної команди в середині введення.
Спайдей

10
Дивіться мого пояснення в іншій відповіді, якщо ви хочете знати, що відбувається.
Jim Paris

Я використовую Ctrl + W і досить добре з ним.
shabunc

108

Я знаю, що на це вже відповіли, але відповідь не пояснює, що відбувається.

Символи, як 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).


Дякую, що допомогло мені віднайти та виправити мою проблему з тилдою / дай "стерти"!
Томас Гессе
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.