Очистить stdin перед чтением

У меня есть следующий сценарий bash:

# do some time consuming task here read -p "Give me some input: " input 

Теперь, как вы могли догадаться, если пользователь нажимает некоторые случайные клавиши во время «трудоемкой задачи», также учитывается нежелательный вход. Как очистить stdin (или, по крайней мере, игнорировать его) до того, как я выдаю команду чтения?

Я не думаю, что есть способ очистить stdin, но (с bash) вы можете читать и отбрасывать то, что есть до того, как вы попросите ввести

 #do some time consuming task here read -t 1 -n 10000 discard read -p "Give me some input: " input 

Это считывает stdin и имеет тайм-аут в 1 секунду, но это не удается, если в stdin больше 10000 символов. Я не знаю, насколько велика вы можете сделать параметр nchars.

В Bash 4 вы можете установить -t (timeout) в 0 . В этом случае read немедленно возвращается с статусом выхода, указывающим, есть ли данные, ожидающие или нет:

 # do some time consuming task here while read -r -t 0; do read -r; done read -p "Give me some input: " input 
 read -d '' -t 0.1 -n 10000 

Это считывает несколько строк входов, если пользователь непреднамеренно нажат, введите несколько раз

Это сработало для меня:

 function clean_stdin() { while read -e -t 0.1; do : ; done } 

Задайте трудоемкую задачу в блоке, stdin которого закрыт:

 { # time consuming task } <&- read -p "Give me some input: " input 

Основываясь на ответе christophjaeger, я добавил -s так, чтобы вход не отражался на терминале и -n чтобы он не дождался новой строки.

 while read -r -t 0; do read -n 256 -r -s done 
  • Чтение из stdin flush stdout?
  • Использование fflush (stdin)
  • Использование fseek с указателем файла, указывающим на stdin
  • Как определить, была ли перенаправлена ​​Console.In (stdin)?
  • Почему мы не можем читать один символ за раз из System.in?
  • Как заставить ssh получить пароль от stdin
  • Чтение двоичных данных из std :: cin
  • Как читать из stdin с помощью fgets ()?
  • Я не могу сбросить stdin
  • Как читать из файла или stdin в Bash?
  • Сравнить два дерева каталогов
  • Interesting Posts

    Преобразование из enum-ординала в тип enums

    Перезапуск системы после нажатия на сканирование руткита

    Преобразовать шестнадцатеричную строку (char ) в int?

    Может ли GPU использоваться для кодирования h264?

    Компьютерные звуки, а не музыка в наушники и компьютерный динамик одновременно?

    Могу ли я запустить XP в качестве виртуальной машины с этой спецификацией оборудования?

    Как использовать первый символ каждого слова в строке

    подтвердите выпадающий список в asp.net mvc

    Планировщик заданий не позволит повторно использовать имена задач из старых, автоматически удаленных задач, которые были созданы с помощью / Z-переключателя

    Как связаться с сервисом Windows из приложения, которое взаимодействует с рабочим столом?

    Как настроить беспроводную сеть для обеспечения максимальной безопасности?

    Что означает статическое значение в ANSI-C

    Почему фрагменты дисков?

    Исправлена ​​ошибка инициализации ffmpeg drawtext

    в рельсах, как вернуть записи в виде CSV-файла

    Давайте будем гением компьютера.