有时可能需要输入一些数据或者执行一个行为而不使用回车键。不久前,当我需要查看弹道方程的数字输出时,就遇到了这个问题。当时希望仅仅按一个键就能递增或者递减一个输入值,并重新计算结果。我用一个脚本完成了这个任务,显示已经改变的输入值和从它计算而来的新结果。这个有趣的脚本是如何处理立即响应。<br> 该脚本能相当好地完成任务。下面的脚本为发射体轨道计算和显示值的简化版本。用户能按照描述的方式设置发射角度和开火速度。脚本将显示发射体的距离、最大高度和飞行时间。<br> 为了处理按键操作,必须首先使用stty建立终端。然后像本章随后将要描述的那样,用head(或者dd)命令获得所按键值。这里使用.icanon开关设置stty,使终端操作的标准模式失效,读输入数据的模式改变为基于字节输入的细粒度模式。-icanon开关的前两个特性(erase和kill)的特殊字符分别擦除最后输入的字符和擦除当前行。最后两个特性(werase和rpmt)的应用不是非常普遍。werase特性的特殊字符擦除最后输入字,rpmt的特殊字符在屏幕上重画当前行。更多详细信息参阅stty联机资料。
展开