如何解决在 mosquitto 中接收到某个消息时,Shell Script 无法离开 while 循环
因此,如果某个消息到达我的 RaspBerry pi,我正在尝试运行此脚本以退出 while 循环。可悲的是它不起作用。不知何故,如果消息到达,它无法识别 j 设置为 false。
#!/bin/bash
# This script subscribes to a MQTT topic using mosquitto_sub.
# On each message received,you can execute whatever you want.
set -x
j=true
while [[ $j == true ]] # Keep an loop to reconnect when connection lost/broker$
do
mosquitto_sub -t parsec.stop -C 1 | while read -r payload
do
# Here is the callback to execute whenever you receive a message:
if [[ "$payload" == "parsec.stop" ]] || [[ $j == false ]]; then
echo "Rx MQTT: ${payload}"
j=false
fi
done
sleep 1 # Wait until reconnection
done # & # discomment the & to run in background (but you should rather run$
echo "end"
这是我在执行脚本时在 Shell 中得到的内容
+ j=true
+ [[ true == true ]]
+ mosquitto_sub -t parsec.stop -C 1
+ read -r payload
+ [[ parsec.stop == \p\a\r\s\e\c\.\s\t\o\p ]]
+ echo 'Rx MQTT: parsec.stop'
Rx MQTT: parsec.stop
+ j=false
+ read -r payload
+ sleep 1
+ [[ true == true ]]
+ mosquitto_sub -t parsec.stop -C 1
+ read -r payload
如您所见,它确实在消息到达后立即声明 j = false。 但它并没有离开循环。由于仍然显示 [[ true == true]]
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。