代码之家  ›  专栏  ›  技术社区  ›  Feroze Mohamed

BASH-Mosquitto_pub命令在时间有“空间”时抛出错误代码有问题

  •  0
  • Feroze Mohamed  · 技术社区  · 6 年前

    嗨,我是一个奇怪的场景

    如果我在终端手动发送下面的命令,效果会很好

    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''.
    

    我的shell脚本是:

    #!/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我会得到错误。 错误仅发生在日期格式中。如果我从脚本中发送任何其他文本,它就会工作。如果我在日期和时间之间加上空格,我会得到错误。

    如果手动发送,我会感到困惑,因为与space works相同的日期

    0 回复  |  直到 6 年前
        1
  •  0
  •   Feroze Mohamed    6 年前

    正如@Gordon Davidson所建议的那样,它起了作用。

    可以将变量用作命令的一部分(但在其周围加上双引号),但不要将命令放在变量中。对于脚本,删除mqttcmd和mystring变量,只需运行mosquitto_pub-h localhost-p 1883-q 1-d-t test-i localClientID-m“$today” – 戈登·戴维森

    推荐文章