为什么读取超时会破坏我的控制台?

为什么读取超时会破坏我的控制台?

我有一个脚本导致了一个问题,我把它归结为这个;

#/bin/bash
read -t 1 -p 'Wanna continue?'
less +F readTimeout.sh
echo 'Wont get printed'

原始脚本通过提示用户继续来运行,但在等待五秒钟(在本例中为一秒)后,它将自行继续。
然后它继续从日志文件(在本例中为本身,出于演示目的)进行跟踪。
然后它应该在用户关闭后执行其余命令less

好吧,当less处于tail模式时,您需要按ctrl+c来阻止它跟随文件(然后您可以滚动/搜索到目前为止的内容less,或按shift+f再次跟随,或Q退出)。

该脚本的问题是,当你^C杀死它less时,它会带你回到提示符(也就是说,其余的命令都不会运行)并且停止回显你输入的任何内容(但是,如果你按下回车键,你的命令实际上会被写入控制台)!

如果不-t打开开关read(或者如果您在超时之前做出响应),它就可以正常工作。
您知道为什么会发生这种情况吗?或者如何解决?到目前为止,我只能强迫用户响应提示(即从中删除timeout标志read

PS
这是独立于终端仿真器的(已测试konsolexterm)。
我尝试过放在stty sane该行后面read,希望它能修复它。

相关内容