Pessoalmente, achei o bish-bosh um pouco complicado para o meu gosto. Eu não sou muito bom com o sql, mas vou dar uma olhada na parte do mqtt. Você precisará de um ouvinte executando o mosquitto_sub para ler e executar comandos, e no seu terminal você precisa se inscrever em um fluxo de saída. Finalmente, você precisará de um manipulador para enviar comandos. Para um ouvinte, você pode tentar algo assim:
#!/bin/bash
##########################
# MQTT Shell Listen & Exec
host=$2
clean="output input cmds";p="backpipe";pid=$(cat pidfile)
ctrl_c() {
echo "Cleaning up..."
rm -f $p;rm "$clean";kill $pid 2>/dev/null
if [[ "$?" -eq "0" ]];
then
echo "Exit success";exit 0
else
exit 1
fi
}
listen(){
([ ! -p "$p" ]) && mkfifo $p
(mosquitto_sub -h $host -t input >$p 2>/dev/null) &
echo "$!" > pidfile
while read line <$p
do
echo $line > cmds
if grep -q "quit" cmds; then
(rm -f $p;rm $clean;kill $pid) 2>/dev/null
break
else
(bash cmds | tee out) && mosquitto_pub -h $host -t output -f out;>out
fi
done
}
usage(){
echo " Mqtt-Exec Listener Via Bash"
echo " Usage: $0 <mqtt server>"
echo " Subscripe to topic \"output\", publish to topic \"input\""
}
case "$1" in
-h|--host)
trap ctrl_c INT
listen
;;
*)
usage
exit 1
;;
esac
Isso funciona bem, a menos que você esteja tentando transmitir coisas, caso em que você precisará codificá-lo de alguma forma ou sedimentar novas linhas. Mas isso deve funcionar simplesmente enviando comandos pelo mqtt.
De inscrever-se no fluxo de saída para ver a saída do shell.
mosquitto_sub -h $host -t input
Finalmente, para um manipulador, algo assim:
#!/bin/sh
cmds="$@"
echo $cmd | mosquitto_pub -h $host -t input -l
exit
Do que você pode rodar isso em uma sessão do tmux junto com o handler e você tem um shell interativo: Janela 1:
./handle echo "This is an interactive mqtt shell!"
Janela 2:
This is an interactive mqtt shell!