有没有办法删除我在 Linux 中隐藏的密码提示中输入的所有字符?例如,当我通过 SSH 连接到服务器时,它会要求我输入密码,但不会显示输入的密钥:
$ ssh root@somehost
root@somehost's password:
有没有办法删除我输入的所有文本,而不必按退格键一段时间?当我认为我输入了错误的内容时,我想重新开始,而按退格键几秒钟很烦人。我尝试了Esc,CtrlA希望选择整个文本,但Home.CtrlC取消了整个命令,我必须再次发送命令以重试。这几乎是最好和最快的解决方案,但仍然不令人满意。插入在我的 shell 中也不起作用。
答案1
Ctrl您可以使用+删除整个输入的密码U。
答案2
与 不同bash
,ssh
的密码提示不使用任何特殊的终端输入库(如 )readline
。 行编辑功能只是基线 POSIX TTY 行编辑功能。
因此,您有一个处于“熟”模式(非原始)的 POSIX TTY,也称为规范模式,并且唯一可用的行编辑是内核提供的。请参阅stty(1)
,并注意到
kill = ^U
。这也是定义退格符 ( ) 的地方。当您不是盲打时,erase = ^?
单词删除 ( ) 很方便。^W
lnext = ^V
意味着您可以键入 control-v 然后键入任何内容(包括 control-c)来获得文字 control-c。
要调试你盲目尝试的操作,请在终端中运行cat
或cat > /dev/null
。输入内容,然后查看哪些可行,哪些不可行,以进行编辑。
readline
(由 所用bash
) 读取原始字符并在用户空间中进行行编辑。不过,其默认绑定与默认 TTY 控制字符兼容,因为它们都提供了部分编辑功能。
readline 远远超出了普通 TTY 的简单行编辑功能。(例如,TTY 只能删除行末的字符,因此没有^a
与delete
或左/右箭头)
当bash
在前台运行命令时,它会首先将 TTY 置于规范模式(因为这是默认模式)。因此,运行时stty -a
(无重定向)将始终看到其自己的终端处于规范模式。但是,如果您从正在bash
运行的其他 TTY 重定向输入,则可以看到 bash + readline 应用了哪些终端设置。例如stty -a < /dev/pts/12
显示-icanon
原始模式,因为我正在bash
该终端上运行。(我切换到另一个选项卡并运行tty
,然后使用第一个终端中的该设备文件路径)。如果我cat
在另一个终端中运行,我会看到icanon
规范模式。
有关的:揭秘 TTY
https://www.gnu.org/software/libc/manual/html_node/Canonical-or-Not.html