[英]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.