我有一个python脚本,每隔几秒钟探测一个运动传感器并在shell上返回一个值" 传感器关闭"或" 传感器已开启"
接下来,我创建了一个名为sensor.sh
#!/bin/bash
sudo python /home/pi/ouimeaux/ouimeaux/examples/watch.py "Wemo Motion"
如果输出流显示" 传感器已开启"
,我尝试执行以下操作来激活trigger.sh
./sensor.sh 2>&1 >/dev/null | grep “on”
if [ $? -eq 1 ]
then
/etc/init.d/trigger.sh start
else
echo "do nothing"
fi
但是,它似乎不起作用 - 我认为stdout
重定向可行。
我知道我可以将输出写入日志文件并让另一个脚本读取尾部来执行此操作但是,此脚本在Raspberry Pi上运行,我希望保持较少的磁盘写入。
我在这里做错了什么?
答案 0 :(得分:0)
2&1
将stderr合并到stdout中,但随后你用> /dev/null
丢弃stdout,所以grep永远不会看到任何输入。因此,作为您问题的直接解决方案,请取出/ dev / null重定向。
然而,一个更好的解决方案仍然是修改你的python脚本以根据传感器值返回不同的退出状态,然后直接在if语句中使用该状态,这将grep完全从等式中删除
if ./sensor.sh &>/dev/null; then
/etc/init.d/trigger.sh start
else
echo "do nothing"
fi
答案 1 :(得分:0)
您测试grep 退出代码。但是 grep在您结束流程之前不会退出。
你可以这样做:
stream.py | while read line; do
if ["$line" = "sensor on"]; then
echo ON
fi
done
你可能想做
if echo $line | grep -q on; then
但这会分叉更多的流程。
立即在python中做到这一点要高效得多。