如何在变量

时间:2016-04-11 21:12:21

标签: linux bash keypress

我使用lirc和raspberrypi构建了一个乐高遥控器。

一切正常,但现在我遇到了问题。火车不断需要信号。我写过这个剧本:

#!/bin/bash

while : 
do
  if [ -t 0 ]; then stty -echo -icanon -icrnl time 0 min 0; fi

  keypress=''
  clear;
  echo "Dies ist das Lego

  1 = vorwärts
  2 = rückwärts
  3 = stop
  "
  read -n 1 text
  if [ "$text" = "1" ];
  then
    while [ "x$keypress" = "x" ]; do
      irsend SEND_ONCE LEGO_Combo_Direct  FORWARD_FLOAT
      keypress="`cat -v`"
    done
  fi

  if [ "$text" = "2" ];
  then
    while [ "x$keypress" = "x" ]; do
      irsend SEND_ONCE LEGO_Combo_Direct  BACKWARD_FLOAT
      keypress="`cat -v`"
    done
  fi

  if [ "$text" = "3" ];
  then
    while [ "x$keypress" = "x" ]; do
      irsend SEND_ONCE LEGO_Combo_Direct  BRAKE_BRAKE
      keypress="`cat -v`"
    done
  fi

done

我的问题是read -n 1 text上的脚本停止了。 如果sombody可以帮助我使用keypress $text脚本不再停止。

提前致谢:)

1 个答案:

答案 0 :(得分:0)

看起来有点过于复杂。 怎么样:

#!/bin/bash
#
if [ -t 0 ]; then stty -echo -icanon -icrnl time 0 min 0; fi
    clear;
    echo "Dies ist das Lego

   1 = vorwärts
   2 = rückwärts
   3 = stop
"
keypress=''
command='BRAKE_BRAKE'
while true;
do
    keypress="`cat -v`"
    case "$keypress" in
        "") ;;
        1) command="FORWARD_FLOAT";;
        2) command="BACKWARD_FLOAT";;
        3) command="BRAKE_BRAKE";;
        x) echo "Terminating..."; break;;
    esac
    irsend SEND_ONCE LEGO_Combo_Direct $command
done

肯定你想添加一些清理代码来将终端恢复到icanon模式......