Как подавить эхо функции проверки ошибок

Я пытаюсь захватить нажатие клавиши в сценарии оболочки (например, используя read ), а не повторять его. Три метода, которые я нашел, были stty -echo , -s switch и stream redirection.

Однако на macOS, который, как представляется, использует реализацию FreeBSD, ни одна из них не работает последовательно.

Следующий сценарий показывает проблему:

 while true; do stty -echo read -s -n 1 CHAR &>/dev/null stty echo done 

При одновременном нажатии стрелок вверх и вниз, иногда команда эхосигнала A^[[B или B^[[A Это происходит особенно часто, когда машина работает медленно (из-за разряда батареи), что указывает на состояние гонки.

Я что-то упускаю? В противном случае, как я могу обойти эту проблему?

One Solution collect form web for “Как подавить эхо функции проверки ошибок”

В вашем цикле есть короткое окно времени между «stty echo» в конце цикла и «stty -echo» на следующей итерации. Вход клавиатуры, полученный во время этого окна, будет эхом, даже если команда чтения не ждет его. Если вы не хотите эхо, не называйте «stty echo» 😉

  • используйте команду «читать» для передачи строк в качестве позиционных параметров в сценарий оболочки
  • Как обрабатывать обратные стрелки, клавиши «Конец» и «Домой» в приглашении на чтение
  • Символ ложных @ в начале подсказки bash в Debian Jessie
  • Как читать с другого терминала?
  • Ждите ключа в сценарии оболочки, который может быть отправлен в / bin / bash
  • Запустите сценарий оболочки и прочитайте вывод в переменной и запустите другой скрипт на основе вывода
  • Изменение подсказки bash в зависимости от того, является ли первый символ пробелом
  • Не удается прочитать стандартный файл - блок операций ввода-вывода
  • Есть ли разница между read, head -1 и sed 1q?
  • Bash: интерактивное дистанционное приглашение
  • Как использовать пользовательский ввод как условие цикла while
  • Linux и Unix - лучшая ОС в мире.