我会去看看我的触摸屏是否用自己的脚本校准。 但我对shell脚本的经验很少。我希望有人能帮助我。
我的想法是执行xinput --list-pros <device>
并使用条目...(242): <no items>
检查终端输出。
如果未校准触摸屏,则可以选择此选项,其他x/y
坐标如...(242): 1 22 333 4444
。
在我的脚本中,我将执行xinput --list-pros <device>
并检查grep
是否有条目(242)
然后检查同一行是否有条目<no items>
。但我无法阅读xinput --list
的输出。
# read the terminal output from xinput
$xinput_output= less xinput --list-pros 7
while read $xinput_output
do
# check first line from output
grep "242" $xinput_output
if [ $? != 0]
then
break;
else
# found 242 check x/y coordinates
grep "<no items>" $xinput_ouput
if [ $? != 0]
then
#no x/y coordinates, execute xinput_calibration
xinput_calibration
exit 0
fi
fi
done < $1
答案 0 :(得分:0)
用反引号或$()附上你的命令:
var=`some command` # note no $ before var
# Or by $()
var=$(some command)
# then you can now use command's output
echo $var
答案 1 :(得分:0)
大概是指xinput --list-props
无论哪种方式,你需要在bash中正确执行命令,并且需要正确分配变量,所以试试这个:
xinput_output=$(xinput --list-props 7)
答案 2 :(得分:0)
感谢您的帮助,
我有一个有效的解决方案。 但我会提前一点。我将删除'touch'命令并将'./demo'输出写入不在文件中的内存中。 不要混淆我改变'xinput'以便在我自己的'./demo'中进行测试,这是一个只有很少'echo'命令来生成终端输出的脚本。
#filename: touch
#!/bin/bash
touch /tmp/tmp.log
./demo > /tmp/tmp.log
calibration=$(grep controller /tmp/tmp.log)
if [ $? != 0 ]
then
echo "missing match, corrupt file\n"
exit 0
fi
if [[ $calibration == *"<no items>"* ]]
then
echo no calibration
#xinput_calibration
else
echo found x/y coodinates
fi
rm /tmp/tmp.log
exit0
测试脚本:
#filename: demo
#!/bin/bash
echo 'cookie'
echo 'cookie'
echo 'cookie'
controller\:\ \<no\ items\>
echo 'cookie'
echo 'cookie'
echo 'cookie'
exit 0
答案 3 :(得分:0)
我的问题是,
tmp=$(./demo)
echo $tmp
将./demo的终端输出作为字符串输出。 和'grep'你找不到一行。 所以你必须输入“$ {tmp}”来找到grep的单行。
#cache terminal output
tmp=$(./demo)
#find word in cache
match=$(echo "${tmp}" | grep 'controller')
echo $match