与不同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
https://zh.wikipedia.org/wiki/POSIX_terminal_interface