zsh 是否对终端使用规范模式?

zsh 是否对终端使用规范模式?

我一直在探索terminfostty。如果我运行,stty -a|grep icanon似乎已设置规范模式,但如果我尝试将其关闭stty -icanon并再次检查,我发现它仍然设置。当我在 bash 下做同样的事情时,我可以禁用 icanon,但我没有注意到行为有任何变化。所以我有两个问题;为什么我无法在 zsh 中禁用 icanon,如果可以的话,它会如何影响行为?

答案1

当我在 bash 下做同样的事情时,我可以禁用 icanon,但我没有注意到行为有任何变化。

那是因为 bash 转变了规范模式离开当读取用户的命令时(为了能够实现终端驱动程序未提供的行编辑功能 - 例如插入文本、使用箭头键左右移动光标等),然后恢复运行任何命令行时的先前终端设置。

要查看其效果,请运行外部命令,例如cat

bash$ stty -icanon
bash$ cat
hheelloo

每个键都会被重复,一次因为stty echo打开,一次因为cat会立即读取它并写回,而不必等待完整的行。

[使用 zsh] 如果我尝试将其关闭stty -icanon并再次检查,我会发现它仍然设置。

当如上所述恢复以前的终端设置时,zsh也强制执行一些合理的默认值(包括echoicanon设置)。可能是因为它假设,如果命令离开规范模式离开终止后,这只是一个意外(例如,当全屏应用程序崩溃viless崩溃时)。

我无法找到任何zsh可以使其像bash使用 readline 库的其他程序一样工作的选项,但是如果您想在运行命令之前关闭 icanon 模式,您可以通过从相同的命令行:

zsh$ stty -icanon; cat
hheelloo

相关内容