shell 关于 stty的一段代码,新手看不懂

isFirst=1
while true; do
_tty_setting=$(stty -g)
stty -icanon
if [ "$isFirst" != "1" ]; then
_key_press=`read -t 5 a; echo $a`
else
_key_press=1
isFirst=0
fi
if [ "$_key_press" != "" ];then
key_save=$_key_press
else
_key_press=$key_save
fi
stty $_tty_setting
case $_key_press in
1) clear;showDetail
;;
2) clear;showDifferent
;;
3) clear;showMissing
;;
4) clear;showWaiting
;;
5) clear;showSame
;;
6) echo ""
echo "bye."
exit 0
;;
esac
done

关于

stty -icanon

read -t 5 a; echo $a

key_save=$_key_press
这几个地方看不懂

这段代码究竟要实现什么功能?具体能解释下吗

stty -icanon
关闭驱动程序中的规范模式处理,跳过缓冲层,用户不能删除字符


read -t 5 a; echo $a 将屏幕输入放在变量a中,然后输出,赋值给 _key_press


大致注释了一下:

sFirst=1    #标记
while true; do #无限循环
        _tty_setting=$(stty -g) #将 stty设置保存在_tty_setting
        stty -icanon            #关闭驱动程序中的规范模式处理,跳过缓冲层,用户不能删除字符                           
        if [ "$isFirst" != "1" ]; then  #在这个标记下需要读取输入
                 _key_press=`read -t 5 a; echo $a` #将屏幕输入放在变量a中,然后输出,赋值给 _key_press
        else
                 _key_press=1 #另一个分支
                isFirst=0
        fi
        if [ "$_key_press" != "" ];then #有输入东西
            key_save=$_key_press #放在key_save中
        else
            _key_press=$key_save #没有输入,放上次的东西
        fi
        stty $_tty_setting #恢复stty设置
        case $_key_press in #根据不同的东西,处理不同逻辑
                1) clear;showDetail
                ;;
                2) clear;showDifferent
                ;;
                3) clear;showMissing
                ;;
                4) clear;showWaiting
                ;;
                5) clear;showSame
                ;;
                6) echo ""
                   echo "bye."
                   exit 0
                ;;
        esac
done
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-11-27
很明显,你这不是一段完整的代码·

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网