bash导致ec2 cli请求无效的json

时间:2015-02-03 05:34:25

标签: json bash amazon-web-services command-line-interface aws-cli

我正在使用bash脚本动态创建EC2 CLI请求。执行bash脚本时,AWS CLI返回Error parsing parameter '--launch-specification': Invalid JSON:,但如果我复制CLI字符串并通过CLI直接提交,则CLI命令不会出现任何问题。

当我在终端中使用复制/粘贴时,bash脚本是否会生成一些导致CLI请求失败的代码字符?

BASH SCRIPT CODE

CMD01=("aws --profile ${myProf} --region ${myRegion} ec2 request-spot-instances --spot-price ${PRICE} --instance-count ${6} --type \"one-time\"  --launch-specification \"{\\\"ImageId\\\":\\\"${1}\\\",\\\"KeyName\\\":\\\"${2}\\\",\\\"InstanceType\\\":\\\"${!5}\\\",\\\"IamInstanceProfile\\\":{\\\"Arn\\\":\\\"${16}\\\"},\\\"Placement\\\":{\\\"AvailabilityZone\\\":\\\"${18}\\\",\\\"GroupName\\\":\\\"${11}\\\"},\\\"NetworkInterfaces\\\":[{\\\"DeviceIndex\\\":0,\\\"SubnetId\\\":\\\"${4}\\\",\\\"AssociatePublicIpAddress\\\":${17}}],\\\"UserData\\\":\\\"string\\\"}\" --dry-run")

通过

回应
echo "$CMD01"
  

aws --profile myProfile --region eu-west-1 ec2 request-spot-instances --spot-price 0.004 --instance-count 1 --type" one-time" - 启动规范" {\" ImageId \":\" ami-9c7ad8eb \",\" KeyName \":\& #34; myKey \",\" InstanceType \":\" t1.micro \",\" IamIns tanceProfile \":{ \"阿恩\":\" ARN:AWS:IAM :: 000000000000:实例简档/我的资料\"},\"安置\&#34 ;: {\" AvailabilityZone \":\" EU-西-1C \" \"组名\":\"为myGroup \&# 34;},\" NetworkInterfaces \":[{\" DeviceIndex \":0,\" SUBNETID \":\"子网-xxxyyy \" \" AssociatePublicIpAddress \":真}],\"的UserData \":\"串\"}&# 34; --dry运行

通过 ${CMD01[@]} > $logFile

执行

生成错误

  

解析参数' - 启动规范':无效的JSON:   " {\"图像标识\":\" AMI-9c7ad8eb \" \"键名\":\"的myKey \ " \" InstanceType \":\" t1.micro \" \" IamInstanceProfile \":{\"阿恩\":\" ARN:AWS:IAM :: 000000000000:实例简档/我的资料\"},\"安置\":{\" AvailabilityZone \":\" EU-西-1C \" \"组名\":\"为myGroup \"},\& #34; NetworkInterfaces \":[{\" DeviceIndex \":0,\" SUBNETID \":\"子网XXXYYY \&#34 ; \" AssociatePublicIpAddress \":真}],\"的UserData \":\"串\"}"

现在,如果我从终端获取较早的echo echo "$CMD01"并进行简单的复制/粘贴,那么CLI输出

  

调用RequestSpotInstances操作时发生客户端错误(DryRunOperation):请求已成功,但设置了DryRun标志。

所以似乎JSON是有效的,但是当从bash脚执行时它是无效的。我做错了什么?

1 个答案:

答案 0 :(得分:0)

我认为你有一个bash错误。

尝试:

CMD01=$(aws commands commands...)