Сценарий для быстрого тестирования всех клавиш на клавиатуре

Я изменяю источник питания 450 - 600

14
17.09.2013, 18:47
2 ответа

Попытайтесь заменить Ваш grep строка с awk сценарий, который сбрасывает его вывод.

xev | \
awk '/state 0x.*, keycode / { print $4; fflush() }' | \
while read keycode ; do
    # etc.
done
5
27.01.2020, 19:52
  • 1
    Здорово! я мог сказать, что это сделано, но я задавался вопросом, почему требуется столько нажатий клавиш для печати вывода, как этот 'сброс' не работает. Если я нажимаю 'b', требуется 5-6 других нажатий клавиш для Pressed 56:b появиться. –  mdrg 17.09.2013, 15:12
  • 2
    Найденный им: awk -W interactive. Спасибо за Вашу справку это было важно. –  mdrg 17.09.2013, 21:37

После еще немного эмпирические, Google и man, эта версия работает, как я ожидал:

#!/bin/bash

function findInArray() {
  local n=$#
  local value=${!n}
  for ((i=1;i < $#;i++)) {
    if [[ ${!i} == ${value}:* ]]; then
      echo "${!i}"
      return 0
    fi
  }
  echo
  return 1
}

list=( 10:1 11:2 12:3 36:Return 37:Control_L 38:a 39:s 134:Super_R 135:Menu )
clear
echo -e "${#list[@]} keys to test\n\n${list[@]}"
xev | \
awk -W interactive '/state 0x.*, keycode / { print $4; fflush() }' | \
while read keycode ; 
do
  found=$(findInArray "${list[@]}" ${keycode})
  if [[ $found ]]; then
    clear
    echo Pressed $found
    list=(${list[@]/$found/})
    remaining=${#list[@]}
    stdbuf -oL -eL echo -e "$remaining keys remaining\n\n${list[@]}"
    if [[ $remaining == 0 ]]; then
      clear
      echo All keys successfully tested!
      pkill xev
      exit 0
    fi
  fi
done

Создайте свой список на основе xev вывод (я поспешно использовал xev | grep keycode, удар клавиатуры и regex замены на текстовом редакторе) и замена это.

1
27.01.2020, 19:52

Теги

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