应用环境linux sh
在嵌入式linux中读取一个字符,开始想用read来实现的,但是发现read输入需要回车才能结束,查了下read用法,
read: 用法: read [-ers] [-a 数组] [-d 分隔符] [-i 缓冲区文字] [-n 读取字符数] [-N 读取字符数] [-p 提示符] [-t 超时] [-u 文件描述符] [名称 ...]
,read -n可以解决,但是问题来,read加了参数貌似不支持sh终端,只能在bash中使用,只能换其他的方法了,方法如下
test.sh
#!/bin/sh
echo "Press 'y' or 'Y' to enter test mode:"
getchar()
{
k=`stty -g` #获取当前stty设置
stty -echo #禁用echo
stty raw
stty min 0 time 1 #设置超时时间为1/10秒
dd if=/dev/tty bs=1 count=1 2>/dev/null #读取一个字符
stty -raw
stty echo
stty $k
}
Ecounter=0
date #测试开始时间
while [ 1 ]; do
if [ $Ecounter -ge 30 ]; then break; fi
Ecounter=`expr $Ecounter + 1`;
char=`getchar`
if [ "$char" = 'y' ] || [ "$char" = 'Y' ] ; then
echo "char=$char"
break;
fi
done
date #测试结束时间
测试结果
./test.sh
Press 'y' or 'Y' to enter test mode:
2016年 09月 18日 星期日 11:26:08 CST
2016年 09月 18日 星期日 11:26:11 CST
lqj@lqj:~/socket$ ./test.sh
Press 'y' or 'Y' to enter test mode:
2016年 09月 18日 星期日 11:26:13 CST
ychar=y
2016年 09月 18日 星期日 11:26:13 CST