Я пытаюсь реализовать время ожидания, которое пользователь может принять решение пропустить путем нажатия любой клавиши. Также это ничего не должно печатать на терминале, поскольку я использую его для отображения индикатора выполнения. Я испытываю затруднения для ловли, и вход проверочного пользователя с дальнейшей трудностью к им не должен вызывать больше задержки в общее время ожидания.
Вот то, что я имею в данный момент:
read -t 0 input </dev/tty1
if [[ $input -ne "" ]]; then
exit 0
fi
И это в цикле, которые обновляют индикатор выполнения. Это успешно выполняется, чтобы не добавить больше задержки или распечатать нежелательные строки, но это не выполняет свою функцию.
- t 0 для не добавления дальнейшей задержки
чтение из "/dev/tty1" для не добавления нежелательных строк
Как я могу достигнуть этого?
Хотите верьте, хотите нет, это - нуль, это портит Вас. При изменении его для очень небольшого числа как.01 это будет работать. Можно упростить его еще больше как это:
if $(read -t.01 -sn1); then exit 0; fi
Вы хотите выполнить две вещи параллельно.
Для достижения этого не помещайте 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. Это помогло бы Вам сделать больше материалов параллельно.