Адаптация моего ответа Debian 9 к Debian 10:
включить бэкпорты:
echo deb http://deb.debian.org/debian buster-backports main contrib non-free | sudo tee /etc/apt/sources.list.d/buster-backports.list
sudo apt update
установить портированное ядро :
sudo apt install -t buster-backports linux-image-amd64
(новое ядро будет установлено вместе с вашим текущим ядром, так что вы всегда сможете загрузить последнее, если что-то пойдет не так)
установить прошивку:
sudo apt install -t buster-backports firmware-linux
На момент написания этой статьи будет установлена версия ядра 5.7.10 с прошивкой от августа 2020 года .
Если вы имеете в виду чтение --встроенной оболочки, то у нее есть возможность вернуться после чтения N символов, а не ждать нажатия клавиши ENTER. Попробуйте:
read -n1 ; echo You entered $REPLY
Кроме того,read --help
Причина, по которой вам нужно нажать Enter , заключается в том, что драйвер устройства терминала (код ядра позади устройства /dev/tty*
или /dev/pt*
, а не физическое устройство с клавиатурой и контролирует вас взаимодействие с )реализует базовый построчный редактор.
Когда приложение выполняет системный вызов read()
для дескриптора файла, открытого, например, на /dev/pts/0
, этот read()
возвращает только полное содержимое строки, которую вы ввели (и, возможно, отредактировали с помощью Backspace , Ctrl+U , Ctrl+W ... )при нажатии Enter (и с символом CR, отправленным вашим терминалом, когда вы нажмите Введите , преобразованное в LF ).
Чтобы отключить этот редактор строк, вам необходимо выдать определенные управляющие инструкции для этого драйвера устройства. И здесь в игру вступает команда stty
.
С stty -icanon
этот строковый редактор отключен(stty cbreak
вместо этого был необходим в некоторых системах, и вы обнаружите, что stty cbreak
часто поддерживается в качестве альтернативы ).
Когда не используется этот режим icanon
, некоторые другие параметры используются для настройки этого прямого режима:
^C
, ^Z
по-прежнему вызывают прерывание/приостановку. И вам нужно stty -isig
, чтобы отключить их, чтобы они передавались как -в приложение для чтения. ^Q
, ^S
по-прежнему используются для управления потоком(stty -ixon
для отключения ). CR
по-прежнему преобразуется в LF
, и вам потребуется stty -icrnl
, чтобы отключить его. stty raw
— это ярлык для отключения всех этих и некоторых выходных обработок. Если в дополнение к этому вы добавите -echo
, то ваше /dev/pts/1
устройство будет действовать как простой проход -между вашим терминалом и приложением, взаимодействующим с ним.
Так:
saved_settings=$(stty -g)
stty raw -echo
byte=$(dd bs=1 count=1 2> /dev/null)
stty "$saved_settings"
Подготовит ровно один байт (, не являющийся символом, не говоря уже о последовательности символов, которую ваш терминал может отправить при нажатии какой-либо клавиши )с терминального устройства, как только он будет отправлен вашим терминалом.
За исключением ksh (, когда включены опции vi
/ emacs
/ gmacs
, где ksh реализует свой собственный редактор строк, см. vared
в zsh
или read -e
в bash для эквивалента )встроенная функция read
по умолчанию не изменяет настройки терминального устройства, поэтому все равно придется ждать, пока введите , чтобы получить что-либо с терминального устройства.
Однако read
встроенная функция zsh (с параметрами -k
или -q
)и ksh93, bash или mksh (с параметрами -n
или -N
)] отключит этот режим icanon
, чтобы иметь возможность вернуться по одному нажатию клавиши, когда они получают ввод с терминального устройства.(isig
не отключен, поэтому вы все равно можете прервать сценарий с помощью Ctrl+C например ).