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

75

Одна вещь, которая раздражает меня при использовании терминала Linux, - это когда мне приходится вводить невидимый пароль, например, когда вы запускаете ssh . Иногда я неправильно набираю одну или несколько букв, а затем мне нужно несколько раз нажать клавишу возврата, чтобы убедиться, что я стер все, чтобы начать заново.

Я знаю, что это не имеет большого значения, но поскольку на днях я обнаружил, что нажатие CTRL + L «очищает» терминал, мне было интересно, есть ли способ очистить / стереть невидимый пароль, не полагаясь на клавишу возврата или нажав клавишу ввода, чтобы Попробуйте еще раз.

StackUnder
источник

Ответы:

70

Вам просто нужно набрать ctrl+ u.

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

Жиль Квено
источник
Никогда не знал об этом. Обычно я просто нажимаю Ctrl + C из-за нежелательного ввода команд.
Spidey
10
Смотрите мое объяснение в другом ответе, если вы хотите знать, что происходит.
Джим Пэрис
Я использую Ctrl + W и довольно хорошо с этим.
Шабун
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, который (согласно 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).

Джим Пэрис
источник
Спасибо, это помогло мне отследить и исправить мою проблему «стирания» тильды / йайя!
Томас Гессе