Я не уверен, чего Вы пытаетесь достигнуть с фрагментом кода, но вот пример использования оценки наряду со сравнением с подобными операторами замены команды:
$ echo `echo 2 + 2 | bc`
4
$ echo $(echo 2 + 2 | bc)
4
$ eval "echo 2 + 2 | bc"
4
$ echo "date"
date
$ eval "date"
Thu Oct 10 21:20:01 EDT 2013
Таким образом, оценка "оценивает" команду или ряд команд, и возвращает результат выполнения той команды. Ни за что в жизни я не могу выяснить использование для eval
кроме того, который может быть сделан или выполнением команд непосредственно или использованием одинарной левой кавычки или $(...)
синтаксис.
Лично мне биш-бош показалось мне немного сложным на мой вкус. Я не очень разбираюсь в sql, но я возьму удар по части mqtt. Вам понадобится слушатель, запускающий mosquitto_sub для чтения и выполнения команд, а на вашем терминале вам необходимо подписаться на выходной поток. Наконец, вам понадобится обработчик для отправки команд. Для слушателя вы можете попробовать что-то вроде этого:
#!/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
Это отлично работает, если вы не пытаетесь передавать данные в потоковом режиме, и в этом случае вам нужно будет как-то его закодировать или вывести новые строки. Но это должно работать для простой отправки команд через mqtt.
Затем подпишитесь на выходной поток, чтобы вы могли видеть вывод оболочки.
mosquitto_sub -h $host -t input
Наконец, для обработчика, что-то вроде этого:
#!/bin/sh
cmds="$@"
echo $cmd | mosquitto_pub -h $host -t input -l
exit
Тогда вы можете запустить его в сеансе tmux вместе с обработчиком, и у вас будет интерактивная оболочка: Окно 1:
./handle echo "This is an interactive mqtt shell!"
Окно 2:
This is an interactive mqtt shell!
Вы видели Биш-Бош? Это должно сделать работу.
Клиент скрипта Shell MQTT, для Bash, Dash, Ashbox Ash и другие