У меня есть следующий скрипт bash:
# do some time consuming task here
read -p "Give me some input: " input
Теперь, как вы уже догадались, если пользователь нажимает некоторые случайные клавиши во время «трудоемкой задачи», нежелательный ввод также учитывается. Как очистить stdin
(или, по крайней мере, проигнорировать) перед выполнением команды чтения?
Ответы:
Я не думаю, что есть способ очистить стандартный ввод, но (с помощью bash) вы можете прочитать и выбросить то, что есть, прежде чем запрашивать ввод
Это читает stdin и имеет тайм-аут в 1 секунду, но не работает, если в stdin более 10000 символов. Я не знаю, насколько большой вы можете сделать параметр nchars.
источник
В Bash 4 вы можете установить
-t
(тайм-аут) на0
. В этом случаеread
сразу возвращается со статусом выхода, указывающим, ожидают ли данные:источник
Это читает несколько строк ввода, если пользователь случайно нажал ввод несколько раз
источник
это хорошо сработало для меня:
источник
-e
в этом случае?Заключите трудоемкую задачу в блок, чей stdin закрыт:
источник
read
будет по-прежнему читать первую строку, введенную во время# time consuming
задачи. Кроме того, если сценарий не содержит команд, которые читают stdin послеread
этого, непрочитанные строки выполняются на интерактивном терминале после завершения сценария. Кто-нибудь успешно это проверял?Основываясь на ответе christophjaeger, я добавил,
-s
чтобы ввод не отражался на терминале и-n
чтобы он не ожидал новой строки.источник
-n
- хорошая идея, но два предыдущих ответа уже упоминали об этом. И учитывая, что цель этого упражнения - прочитать и отбросить все, что было напечатано до того, какread
было выполнено , я не понимаю, что, по вашему мнению,-s
будет хорошего .источник