当我在 bash 下做同样的事情时,我可以禁用 icanon,但我没有注意到行为有任何变化。
那是因为 bash 在从用户读取命令时关闭规范模式(为了能够实现终端驱动程序不提供的行编辑功能——比如插入文本、使用箭头键左右移动光标等) ,然后在运行任何命令行时恢复以前的终端设置。
要查看其效果,请运行如下外部命令cat
:
bash$ stty -icanon
bash$ cat
hheelloo
Run Code Online (Sandbox Code Playgroud)
每个键都将重复,一次是因为stty echo
打开,一次是因为cat
将立即读取并写回它,而不必等待完整的行。
[with zsh] 如果我尝试关闭它
stty -icanon
并再次检查,我会看到它仍然设置。
如上所述恢复以前的终端设置时,zsh
还会强制执行一些合理的默认值(包括echo
和icanon
设置)。可能那是因为它假设,如果命令在终止时关闭规范模式,那只是一个意外(例如,当全屏应用程序喜欢vi
或less
崩溃时)。
我找不到任何zsh
可以使它像bash
(以及像使用 readline 库的任何其他程序一样)工作的选项,但是如果您想在运行命令之前关闭 icanon 模式,您可以通过调用 stty 从相同的命令行:
zsh$ stty -icanon; cat
hheelloo
Run Code Online (Sandbox Code Playgroud)