簡體   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