使用 Linux 终端时让我烦恼的一件事是当我必须输入不可见的密码时,例如当你运行SSH。有时我输错了一个或多个字母,然后我必须按几次退格键以确保我删除了所有内容才能重新开始。
我知道这不是什么大问题,但自从前几天我发现按 CTRL+L“清除”终端时,我想知道是否有一种方法可以清除/删除不可见的密码,而无需依赖退格键或按 Enter 键再试一次。
答案1
我知道这已经得到回答,但答案并没有解释发生了什么。
Ctrl像+这样的字符L由应用。在向 shell 中输入输入的情况下,例如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 手册页)将“删除当前行”。您还可以使用stty
更改此映射:
stty kill ^E # make ctrl-e erase the line
这一页如果您感兴趣的话,有很多关于 TTY 层的重要信息。
如果事情还不够混乱的话:当出现交互式提示时bash
,您实际上是不是在“规范”行编辑模式下。相反,bash
是在您键入时直接接收每个字符,并通过阅读线图书馆。这个图书馆将要不过,请遵守您在终端设备上设置的映射,因此您仍然可以用来stty
更改它们。或者,您可以通过在文件内bash
设置属性,在内部和其他基于 readline 的程序中独立自定义它们。请参阅unix-line-discard
~/.inputrc
bash 手册页了解更多信息。
当您运行程序时,bash
重新启用规范行编辑模式 ( stty icanon
)(如果之前已启用),然后在程序完成时再次禁用它 ( stty -icanon
)。
答案2
您只需输入ctrl+ u。
享受=)