在Linux中的shell /终端上清除/清除输入错误的隐形密码


75

使用Linux终端使我烦恼的一件事是,当我不得不输入一个看不见的密码时,例如当您运行ssh时。有时我输错了一个或多个字母,然后必须按几次退格键以确保我擦除了所有内容才能重新开始。

我知道这没什么大不了的,但是由于前一天我发现按CTRL + L会“清除”终端,我想知道是否有一种无需依靠退格键或按Enter键即可清除/擦除不可见密码的方法。再试一次。

Answers:



108

我知道已经回答了,但是答案并不能解释发生了什么。

Ctrl+ L这样的字符由应用程序处理。如果将输入输入到shell中,如bash,它将清除屏幕。某些应用程序,例如emacs,使用它来重绘屏幕和/或更新光标。

TTY线路规则会处理密码提示中的Ctrl+等字符。只要输入终端处于“规范”行编辑模式,它们便可以工作,这是您输入密码时程序所处的模式。在这种模式下,解释这些字符的是Linux内核本身。您可以在以下输出中查看将哪些功能分配给了哪些键:Ustty -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手册页)将“擦除当前行”。您还可以stty用来更改此映射:

stty kill ^E   # make ctrl-e erase the line

如果您感兴趣,此页面上有很多有关TTY层的重要信息。


如果事情还不够混乱:在交互式提示下bash,您实际上并不处于“规范”行编辑模式。而是bash在您键入字符时直接接收每个字符,并通过readline库解释控制序列本身。不过,该库将支持您在终端设备上设置的映射,因此您仍然可以使用stty它们进行更改。或者,您可以bash通过unix-line-discard~/.inputrc文件内设置属性,在内部程序和其他基于readline的程序中独立地自定义它们。有关更多信息,请参见bash手册页

运行程序时,如果之前启用过bash标准行编辑模式(stty icanon),则重新启用它,然后在程序完成(stty -icanon)时再次禁用它。


谢谢,这帮助我查找并修复了tilda / yay'erase'问题!
托马斯·黑森
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.