繁体   English   中英

使用bash脚本输出和有选择的定期输出来触发另一个脚本

[英]Using bash script output with periodic output selectively to trigger another script

我有一个Python脚本,该脚本每隔几秒钟探测一次运动传感器,并在外壳上返回一个值“ 传感器已关闭 ”或“ 传感器已打开

接下来,我创建了一个如下的bash脚本,名为sensor.sh

#!/bin/bash
sudo python /home/pi/ouimeaux/ouimeaux/examples/watch.py "Wemo Motion"  

然后,如果输出流显示“ sensor is on ”,我尝试执行以下操作来激活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上运行,因此我希望减少磁盘写入。

我在这里做错了什么?

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

您测试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中执行此操作效率更高。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM