Я ищу способ поймать значение функциональных клавиш в переменной, когда пользовательское нажатие функциональная клавиша. Я попробовал командой dd, но только буквы или ключи чисел захватываются: команда dd не работает почему функциональные клавиши.
Здесь одни несколько тестовых строк, которые я попробовал, но переменная всегда ничего не возвращает с функциональными клавишами:
выбор =dd if=/dev/tty bs=2 count=2 2>/dev/null
$ selection= (dd bs=2 count=2 2>/dev/null)
выбор =dd bs=1 count=1 2>/dev/null
$ selection= (dd bs=1 count=1 2>/dev/null)
выбор =head -c1
$ selection= (возглавляют-c1),
Например - когда я продвигаю ключ F3, оцените ^ [[, 13 ~ появляются на экране, но при выполнении эха selection= $selection, мой переменный "выбор" остается пустым (выбор =)
Кто-то может помочь мне? Что я делаю неправильно? Почему это не работает с функциональными клавишами (F3...)?
Спасибо
Можно сделать как это:
Прочитайте код ключей
Нажмите Ctrl+v и нажмите клавишу. F1, например,
И считайте вывод. F1 дает ^[OP
Отметьте это ^[
для Escape, который Вы запишете в сценарии как \e
Или получите все коды ключей функций
for x in {1..24}; do echo -n "F$x "; tput kf$x | cat -A; echo; done
Принятие F13 является Сдвигом + F1
Дескриптор вводит сценарий
С ударом функционирует как while
, read
, case / esac
Пример:
#!/bin/bash
ReadKey() {
if read -sN1 KEY; then
while read -sN1 -t 0.001 ; do
KEY+="${REPLY}"
done
fi
}
while ReadKey; do
case "${KEY}" in
$'\eOP') echo 'F1';;
$'\e[24~') echo 'F12';;
*) echo "Keys pressed: ${KEY}";;
esac
done