Как поймать функциональные клавиши (F3, F4 …) оценивают в переменной в оболочку сценария?

Я ищу способ поймать значение функциональных клавиш в переменной, когда пользовательское нажатие функциональная клавиша. Я попробовал командой 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, мой переменный "выбор" остается пустым (выбор =)

  • то, когда я продвигаю d ключ, оцениваю d, появляется на экране и при выполнении эха selection= $selection, мой переменный "выбор", равный (selection=d)

Кто-то может помочь мне? Что я делаю неправильно? Почему это не работает с функциональными клавишами (F3...)?

Спасибо

2
задан 18 March 2019 в 21:54

1 ответ

Можно сделать как это:

  • Прочитайте код ключей
    Нажмите 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
1
ответ дан 2 December 2019 в 04:38

Другие вопросы по тегам:

Похожие вопросы: