BASH - Команда Mosquitto_pub выдает ошибку, если во времени есть «пробел», что-то не так со мной, код - PullRequest
0 голосов
/ 14 июля 2020

Привет, у меня странный сценарий

если я отправлю команду ниже вручную в терминале, он работает хорошо

root@VPRT:/home/root# mosquitto_pub -h localhost -p 1883 -q 1 -d -t test -i localClientID -m '2020-07-14 15:03:27'

Но то же самое при отправке из сценария Bash я получаю ошибку

Error: Unknown option '15:03:27''.

мой сценарий оболочки:

#!/bin/bash
mqttcmd="mosquitto_pub -h localhost -p 1883 -q 1 -d -t test  -i localClientID -m "
dateformat="%Y-%m-%d %H:%M:%S"

function my_date {
date "+${dateformat}"
}

while true; do

today=$(my_date)
echo "today : " $today

mystring="$mqttcmd" 
mystring+="'"
mystring+="$today"
mystring+="'"

#print
echo ${mystring}

#publish
${mystring}

sleep 5

done

если я отправлю ту же команду, которая ПЕЧАТИВАЕТСЯ из сценария, она работает, но из оболочки я получаю ошибку. ошибка возникает только с форматом даты. если я отправлю любой другой текст из скрипта, он работает. если я добавлю пробел между датой и временем, я получу ошибку.

я запутался, так как та же дата с пробелом работает, если отправлено вручную

1 Ответ

0 голосов
/ 16 июля 2020

Как было предложено @Gordon Davisson, это сработало.

Вы можете использовать переменные как часть команд (но заключать их в двойные кавычки), но не помещайте команды в переменные. Для вашего скрипта удалите переменные mqttcmd и mystring и просто запустите mosquitto_pub -h localhost -p 1883 -q 1 -d -t test -i localClientID -m "$ today" - Gordon Davisson

...