Чтение ввода в bash в бесконечном цикле и реагирование на него

bash loops input

61 просмотра

1 ответ

Поэтому я хочу подождать 1 секунду для ввода (варианты, которые я буду реализовывать позже). Или я хочу, чтобы программа напечатать что-то (будет реализовано позже). Я столкнулся с проблемой, хотя при попытке прочитать этот 1 символ для функции, вот мой код:

while true
   do read $var -t 1
      case $var in
          ("h")
              help
              ;;
      esac
done

Если я попытаюсь повторить после случая, программа действительно ждет 1 секунду, проблема в том, что она не распознает мой ввод h, как я могу это исправить?

Автор: LukaTheLegend Источник Размещён: 12.11.2019 09:02

Ответы (1)


1 плюс

Решение

Я немного изменил ваш образец, чтобы он работал. В операторе чтения произошла ошибка. использовать read varвместо read $var. Этот исправленный образец теперь распознает также hвходные данные.

В связи с вашим вопросом, почему он не ждет второго ( что было трудно определить, поэтому я немного увеличил время ожидания ;-) )? Это связано с тем, что при вводе чего-либо тайм-аут чтения прерывается. Это как имя параметра говорит, что время ожидания для ввода пользователя. Так что, если пользовательский ввод что-то, таймаут прерывается.

#!/bin/bash

while true 
do
      echo 'wait for input ...'

      read -t 10 var

      echo 'got input ...'

      case $var in
        h)
          echo 'help'
        ;;
      esac
done
Автор: FrW Размещён: 03.12.2015 04:49
Вопросы из категории :
32x32