场景:
Shell脚本先打印某Log,会打印几十秒
然后用 read ACTION 读一个输入进来
根据输入的值进行下一步操作
如果在第一步,打印Log的过程中有键盘输入,这些输入都会被保存在input buffer里,到第二步读取的时候会一起被读进来。如果键盘输入里有回车,那么read就会直接把回车以前的字符存入ACTION。
键盘输入可以能是各种情况,有多个字符,多个回车。
有没有什么办法,可以再read之前把input buffer清空?
场景:
Shell脚本先打印某Log,会打印几十秒
然后用 read ACTION 读一个输入进来
根据输入的值进行下一步操作
如果在第一步,打印Log的过程中有键盘输入,这些输入都会被保存在input buffer里,到第二步读取的时候会一起被读进来。如果键盘输入里有回车,那么read就会直接把回车以前的字符存入ACTION。
键盘输入可以能是各种情况,有多个字符,多个回车。
有没有什么办法,可以再read之前把input buffer清空?
一个变通的方法在真正的 read 前面加一句
read -t 1
(1s的timeout),让真正的read给出一个prompt string用于区分,这样在prompt string出现之前的输入(至多一个回车)都会被忽略。如果觉得1s的timeout太长,可以自己写一个简单的c程序,这个程序的作用就是先给自己设置一个alarm(setitimer或者alarm系统调用),然后
while (getchar());