我正在搜索文件中的事件字段但输出错误。我在输入设备中搜索gpio-keys事件,我已经编写了一个脚本,但我无法在输出文件中打印任何内容(在我的情况下,我在按钮设备文件中写入它始终为null)。请帮我解决这个问题。我在脚本文件中哪里做错了?
Bash脚本:
#!/bin/bash
if grep -q "gpio-keys" /proc/bus/input/devices ; then
EVENT=$(cat /proc/bus/input/devices | grep "Handlers=kbd")
foo= `echo $EVENT | awk '{for(i=1;i<=NF;i++) if($i=="evbug")printf($(i-1))}'`
#foo=${EVENT:(-7)}
echo -n $foo > /home/ubuntu/Setups/buttonDevice
fi
答案 0 :(得分:1)
Prakash,我无法访问您的谷歌硬盘。但我只是想给你一些建议: -
foo= `echo $EVENT | awk '{for(i=1;i<=NF;i++) if($i=="evbug")printf($(i-1))}'`
这是旧式的。更好用如下: -
foo=$(echo $EVENT | awk '{for(i=1;i<=NF;i++) if($i=="evbug")printf($(i-1))}')
在回显变量时也总是使用双引号“”。见下文: -
echo -n "$foo" > /home/ubuntu/Setups/buttonDevice
尝试使用以下代码,它将适合您
#!/bin/bash
if grep "gpio-keys" /proc/bus/input/devices >/dev/null ; then
cat /proc/bus/input/devices | grep "Handlers=kbd" | awk '{for(i=1;i<=NF;i++){ if($i ~ /eve/){printf "%s \n", $i} } }') > /home/ubuntu/Setups/buttonDevice
fi
buttonDevice中的输出将是
EVENT0
事件1
。
。
。
。
event100
答案 1 :(得分:1)
我仍然无法在buttondevce中获得任何内容
毫无疑问,因为在输入行
H: Handlers=kbd event0
evbug
您的awk
脚本正在寻找。
我的情况是event0,但它可能会有所不同,这取决于内核的允许程度。
如果是event0 或类似的,那么查找evbug
是没有意义的。更改声明
if($i=="evbug")printf($(i-1))
到
if ($i~"event") print $i
(使用正则表达式匹配)。
我已经像上面那样改写了我的剧本。但通过它,我有两个事件(event0,event3),但...我的输入设备很多,但我想要gpio-keys事件
Aha - 为了只从gpio-keys
部分获取处理程序行,您可以将sed
与地址范围一起使用:
EVENT=`sed -n '/gpio-keys/,/Handlers=kbd/s/.*Handlers=kbd //p' </proc/bus/input/devices`