【发布时间】:2015-11-04 09:20:38
【问题描述】:
我正在尝试自动化获取游戏控制器的设备事件并检查其名称的过程,然后如果名称与字符串匹配,则将事件传递给另一个程序。
我手动运行evtest /dev/input/eventXX 来检查输入设备的名称,然后通过键盘中断(ctrl-c) 来停止它。如果该设备与某种类型的游戏控制器的名称匹配,我会使用相同的事件编号运行命令xboxdrv --evtest /dev/input/eventXX。
但是,因为“evtest”命令会继续打印输入设备的输出,而不是在打印名称后终止并且仅在键盘中断时退出,所以我不确定如何让 bash 脚本获取设备的名称.
我还在学习 bash,所以我的代码中可能存在语法错误。但是,这里是:
#!/bin/sh
WiiUGCName="Wii U Gamecube Adapter Port"
#find the controller(s)
NumberOfEvents=$(ls /dev/input | grep -c event*)
echo "Number of input devices: $NumberOfEvents"
#launch xboxdrv for each controller
i=0
while [ $i < $NumberOfEvents ]; do
echo "loop"
OccurrencesOfName=$(evtest /dev/input/event$i | grep -c "$WiiUGCName")
echo "Occurrences: $OccurrencesOfName"
if [ $OccurrencesOfName>0 ]; then
echo "Controller found"
#launch xboxdrv here
else
echo "no controller found"
fi
let i=i+1
done
所有这些代码现在实际上都挂在evtest,因为它不能被终止。
【问题讨论】: