Попытайтесь заменить Ваш grep
строка с awk
сценарий, который сбрасывает его вывод.
xev | \
awk '/state 0x.*, keycode / { print $4; fflush() }' | \
while read keycode ; do
# etc.
done
После еще немного эмпирические, 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 замены на текстовом редакторе) и замена это.
Pressed 56:b
появиться. – mdrg 17.09.2013, 15:12awk -W interactive
. Спасибо за Вашу справку это было важно. – mdrg 17.09.2013, 21:37