【问题标题】:Cannot execute an AWS IOT command formed from a bash script无法执行由 bash 脚本形成的 AWS IOT 命令
【发布时间】:2021-01-26 05:32:44
【问题描述】:

我编写了以下 bash 脚本来向我的 IOT 设备发送命令:

#!/bin/bash
# target aws command
# aws iot-data publish --topic 12345678_toDevice --qos 1 --payload ``echo '{"command": "do soemthing 90"}' | base64`` --region us-west-2
mac=$(cat mac.txt)
#echo $mac 
cmd1="aws iot-data publish --topic "
cmd2="_toDevice --qos 1 --payload \`echo '{\"command\": \"dosomething "
cmd3="\"}' | base64\` --region us-west-2"
echo $cmd1$mac$cmd2$1$cmd3
command=$($cmd1$mac$cmd2$1$cmd3)

基本上,该命令获取我试图与之通信的设备的mac地址,并形成am aws命令字符串,然后执行它。

当我运行我的脚本时,我得到了这个:

>./setpos.sh 45

usage: aws [options] <command> <subcommand> [<subcommand> ...] [parameters]
To see help text, you can run:

  aws help
  aws <command> help
  aws <command> <subcommand> help

Unknown options: "dosoemthing, 45"}', |, base64`, '{"command":

aws iot-data publish --topic 588E815CA84C_toDevice --qos 1 --payload `echo '{"command": "setDesiredPosition 45"}' | base64` --region us-east-2

如果我将 echo'ed 命令(最后一行)复制并粘贴到 bash 中,命令有效????如何让 bash 正确格式化命令,以便它可以从脚本中执行它???

【问题讨论】:

    标签: bash amazon-web-services aws-iot


    【解决方案1】:

    您似乎正在尝试以编程方式生成命令。您可以像这样正确运行命令:

    payload="$(echo "{\"command\": \"dosomething $1\"}" | base64)"
    aws iot-data publish --topic "${mac}_toDevice" --qos 1 --payload "$payload" --region us-west-2
    

    如果您想在变量中捕获运行aws 命令的输出,您可以这样做:

    payload="$(echo "{\"command\": \"dosomething $1\"}" | base64)"
    command="$(aws iot-data publish --topic "${mac}_toDevice" --qos 1 --payload "$payload" --region us-west-2)"
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-01-04
      • 2016-04-19
      • 2016-07-25
      • 2012-10-16
      • 1970-01-01
      • 2014-02-08
      • 1970-01-01
      相关资源
      最近更新 更多