bash - 无法执行由 bash 脚本形成的 AWS IOT 命令
问题描述
我编写了以下 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 正确格式化命令,以便它可以从脚本执行它???
解决方案
看起来您正在尝试以编程方式生成命令。您可以像这样正确运行命令:
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)"
推荐阅读
- angular - 在 Kendo UI 中导出受保护的 PDF 文件
- linux - 在 CentOS 上更改 PGDATA
- java - 无法使用 Appium Java 在日历中选择未来日期
- module - Does the main kernel "make" command also make modules internally?
- java - Java 是否提供任何库来找出数组中出现频率最高的数字?
- sass - 无法通过页面 css 文件向“body”标签添加值
- java - I am little confuse in different Collection 和 Collections 和有什么不一样?
- http - 如何在工件中禁用 HTTP
- android - 第一次安装 APK 后需要时间,然后它可以正常工作 Xamarin
- android - 如何在 Swipe 上更改 RecyclerView 项目颜色?