我可以mosquitto_sub用来订阅特定主题的代理,比如test_topic,
mosquitto_sub -h MOSQUITTO_BROKER_HOSTNAME -t test_topic
我也可以用管道 grep 指定一个特定的关键字,比如Valve_closed,
mosquitto_sub -h MOSQUITTO_BROKER_HOSTNAME -t test_topic | grep "valve_closed"
每次该特定主题广播“阀门关闭”消息时,这只会输出带有“valve_closed”的换行符。
输入,
第 1 行: mosquitto_sub -h MOSQUITTO_BROKER_HOSTNAME -t test_topic | grep "valve_open"
第 2 行: mosquitto_sub -h MOSQUITTO_BROKER_HOSTNAME -t test_topic | grep "valve_closed"
输出,
第 1 行: valve_closed
现在,我的问题是,如何通过管道传输命令,如果grep "valve_closed"为真,则执行另一个命令。
我试过像echo "Okay so now Valve is Closed"另一个|管道命令一样链接一个命令,
mosquitto_sub -h MOSQUITTO_BROKER_HOSTNAME -t test_topic | grep "valve_closed" | echo "Okay, so now Valve is Closed"
但这只是运行带有 output 的 echo 命令"Okay, so now Valve is Closed",即使我在括号内将 grep+echo 分组。
我也尝试使用 AND 运算符&&,
mosquitto_sub -h MOSQUITTO_BROKER_HOSTNAME -t test_topic | grep "valve_closed" && echo "Okay, so now Valve is Closed"
虽然这会等待 grep 在valve_closed找到匹配项后立即匹配字符串,但它会执行echo "Okay, so now Valve is Closed".
我也尝试过使用 if 语句,但是任何包含条件语句似乎都打破了轮询性质,message_sub它不断监视给定主题并打印出其输出。
我对如何使用 mosquitto_sub 检索消息并根据消息内容执行 shell 命令/脚本有点迷茫。谢谢阅读。