我在写一个SHELL程序,可是遇到了一个难题,
在READ接受输入时,必须按回车键才能确认,
而我需要只要按一个键就能得到用户的输入,无须按回车键!有什么好办法呢
请各位大侠不吝赐教! 深感为谢!
michaelds 回复于:2002-03-19 13:37:04
一个经典的小难题,HERE you are:
把下面这个函数如法应用到你的程序中去吧。
#!/bin/sh
get_char()
{
SAVEDSTTY=`stty -g`
stty -echo
stty raw
dd if=/dev/tty bs=1 count=1 2> /dev/null
stty -raw
stty echo
stty $SAVEDSTTY
}
echo "Press any key to continue..."
char=`get_char`
michaelds 回复于:2002-03-19 13:45:05
忘了说了,如果你的机器上不认stty raw那么把函数中两处出现的raw换成cbreak。
valentine 回复于:2002-03-19 15:55:44
给加到精华里了。
鸟人 回复于:2002-03-19 16:36:34
非常感谢!
另外还有一个小问题:有没有什么好办法隐藏光标呢?
sopato 回复于:2002-03-20 09:38:11
大家都不要谦虚了,轮流做不是很好吗?? :)
txlinux 回复于:2002-03-20 10:55:01
真高兴,在 valentine ,mygod 之后,又涌现出一位有志青年。真有点相见狠晚的感觉。
我相信, michaelds 即便不做斑竹,凭他的热心和能力,也会受到大家的支持和感谢的。
萝卡 回复于:2003-02-28 21:37:03
如果是
while :
do
case
1)....;
2),....:
0)exit;
done
,输入1或2(不用敲回车)就可以运行的话,有办法吗
红袖添香 回复于:2003-02-28 22:07:25
...
呵呵,一年前的帖子哦~
做成子程序来调用就好了,试试这个
#!/usr/bin/ksh
get_char()
{
SAVEDSTTY=`stty -g`
stty -echo
stty raw
dd if=/dev/tty bs=1 count=1 2> /dev/null
stty -raw
stty echo
stty $SAVEDSTTY
}
while :
do
printf "press any key or RETRUN to quit: "
c=`get_char`
case "$c" in
[0-9]) echo "this is digit $c";;
[a-zA-Z]) echo "this is aphabet $c";;
^M) exit;;
*) echo "Key undefined! "
esac
done
说明:^M 的输入方法是 CTRL-V-M
htldm 回复于:2003-02-28 22:16:56
又学了一招.
bzzyg 回复于:2003-02-28 23:05:41
请红袖添香老兄作一下解释,
| 论坛热门帖子: | [lch203] 写得蛮好的linux学习笔记(10-21) [黑马制造] 学习java的30个目标(10-19) [笑傲股林] 做测试半年了,有点迷茫,应该再学些什么提高自己的测试水平和测试能力呢?(10-19) [udp8589] 大家用google的来吱一声? 用百度的~~也来报道下?(10-18) [沂偌掳兆] 本人总结的一些认为C++比较经典的书籍,希望对大家有用(10-18) |
| TAG标签: | 实现 任意 继续 程序 如何 紧急 回复 echo tiansgx 输入 |
注册
个人空间
