Выход, ожидающий на вводе данных пользователем

Я пытаюсь реализовать время ожидания, которое пользователь может принять решение пропустить путем нажатия любой клавиши. Также это ничего не должно печатать на терминале, поскольку я использую его для отображения индикатора выполнения. Я испытываю затруднения для ловли, и вход проверочного пользователя с дальнейшей трудностью к им не должен вызывать больше задержки в общее время ожидания.

Вот то, что я имею в данный момент:

read -t 0 input </dev/tty1
   if [[ $input -ne "" ]]; then
exit 0
fi

И это в цикле, которые обновляют индикатор выполнения. Это успешно выполняется, чтобы не добавить больше задержки или распечатать нежелательные строки, но это не выполняет свою функцию.

- t 0 для не добавления дальнейшей задержки

чтение из "/dev/tty1" для не добавления нежелательных строк

Как я могу достигнуть этого?

1
задан 13 October 2016 в 00:11

2 ответа

Хотите верьте, хотите нет, это - нуль, это портит Вас. При изменении его для очень небольшого числа как.01 это будет работать. Можно упростить его еще больше как это:

if $(read -t.01 -sn1); then exit 0; fi
2
ответ дан 7 December 2019 в 12:37

Вы хотите выполнить две вещи параллельно.

  1. Считайте вход, ожидая, 5 секунд (говорят)
  2. Обновите индикатор выполнения (показывая, что 5 секунд заканчиваются),

Для достижения этого не помещайте read управляйте в цикле.

Вместо этого сделайте что-то вроде этого:

for i in {1..10}; do sleep 0.5s; echo ${i}0; done | zenity --progress --auto-close --text="waiting for input...5sec" 2>/dev/null &  
read -t 5 asd && kill $!

(поместите вышеупомянутые две строки в файл (скажите, что abc.sh), и выполняют его bash abc.sh )

Объяснение:

Первая команда (для обновления индикатора выполнения) отправляется в фон с и. Если считанная команда, если пришедшийся первым, kill $! закроет индикатор выполнения.

Примечание: Контроль Параллель GNU. Это помогло бы Вам сделать больше материалов параллельно.

1
ответ дан 7 December 2019 в 12:37

Другие вопросы по тегам:

Похожие вопросы: