首页 > 解决方案 > BASH - 如果时间有“空间”,Mosquitto_pub 命令会引发错误,我的代码有问题

问题描述

嗨,我是一个奇怪的场景

如果我在终端中手动发送以下命令,它运行良好

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

如果我发送从脚本中打印的相同命令,它可以工作,但从 shell 我得到错误。错误只发生在日期格式上。如果我从脚本发送任何其他文本,它就可以工作。如果我在日期和时间之间添加空格,则会出错。

如果手动发送,我很困惑与空间作品的同一日期

标签: linuxbashmosquitto

解决方案


正如@Gordon Davisson 所建议的,它奏效了。

您可以将变量用作命令的一部分(但在它们周围加上双引号),但不要将命令放在变量中。对于您的脚本,删除 mqttcmd 和 mystring 变量,然后运行 ​​mosquitto_pub -h localhost -p 1883 -q 1 -d -t test -i localClientID -m "$today"Gordon Davisson


推荐阅读