![`stty --file= 的效果 ` 对于 bash 中的控制台来说只是临时的。为什么?](https://linux22.com/image/105833/%60stty%20--file%3D%20%E7%9A%84%E6%95%88%E6%9E%9C%20%60%20%E5%AF%B9%E4%BA%8E%20bash%20%E4%B8%AD%E7%9A%84%E6%8E%A7%E5%88%B6%E5%8F%B0%E6%9D%A5%E8%AF%B4%E5%8F%AA%E6%98%AF%E4%B8%B4%E6%97%B6%E7%9A%84%E3%80%82%E4%B8%BA%E4%BB%80%E4%B9%88%EF%BC%9F.png)
打开两个控制台/X 终端。从附加到/dev/tty1
(Linux 控制台)或/dev/pts/0
(X 终端)的一个,运行$ stty -echo
. (现在键盘回显已关闭。)然后从另一个运行$ stty --file=/dev/tty1 echo
。
现在在第一个终端中输入一些内容。回显,ok,最后stty
生效了。但一旦按下回车键,它就会恢复到-echo
状态。为什么是这样?永久改变可能吗?
这不适用于 stty 标志的某些组合,至少不适用于“echo / -echo”。当从同一终端运行“$ stty --file=”时,它会永久影响。
注意 Zsh 对于 stty 有自己的策略。看这个问题
编辑:在第一篇文章中,我未能报告这种情况发生在 bash 中,但不是在 dash 中。还添加了对 zsh 案例的提及。
答案1
您的 shell 执行此操作是为了帮助您编辑命令行。
bash 的 readline 库保存/恢复终端模式。您可以在rl_prep_terminal
和rl_deprep_terminal
函数,间接调用edit_and_execute_command
。