我无法在EC2 AWS-AMI Linux上执行命令作为脚本的一部分。
作为命令的一部分,我必须将一些vars传递给CLI,包括--subnet-ids "subnet-c123456" "subnet-b123456" "subnet-a123456"
之类的引号,所以我创建了代码块
#!/bin/sh
set -x
......
MySubnetA="subnet-a123456"
MySubnetB="subnet-b123456"
MySubnetC="subnet-c123456"
$(aws --profile myProfile --region myRegion rds create-db-subnet-group --db-subnet-group-name ${!1} --db-subnet-group-description ${!1} --subnet-ids \"${MySubnetA}\" \"${MySubnetB}\" \"${MySubnetC}\" --tags Key=Name,Value=${!1})
当我运行脚本时,输出显示带有转义双引号的单引号的命令,这会导致CLI失败。
++ aws --profile myProfile --region us-west-1 rds create-db-subnet-group --db-subnet-group-name myDBgroup --db-subnet-group-description myDBgroup --subnet-ids '"subnet-a123456"' '"subnet-b123456"' '"subnet-c123456"' --tags Key=Name,Value=myDBgroup
如何传递命令,因此双引号不包含在单引号中。
更新
根据下面的评论,如果我回显命令字符串,然后在终端中复制/粘贴运行,则命令按预期执行。但是当在脚本内部运行时它会失败。 bash脚本是否可以在命令中添加额外的字符,导致其失败?
感谢 领域
答案 0 :(得分:1)
单引号是使用xtrace的工件,实际上并不是参数的一部分。它们只是表明双引号实际上是参数的一部分,并不仅仅表明该参数只是一个单词。
答案 1 :(得分:0)
不需要在aws
命令中使用转义周围的转义引号,将其用作:
$(aws --profile myProfile --region myRegion rds create-db-subnet-group --db-subnet-group-name ${!1} --db-subnet-group-description ${!1} --subnet-ids ${MySubnetA} ${MySubnetB} ${MySubnetC} --tags Key=Name,Value=${!1})
或者引用它们而不逃避:
$(aws --profile myProfile --region myRegion rds create-db-subnet-group --db-subnet-group-name ${!1} --db-subnet-group-description ${!1} --subnet-ids "$MySubnetA" "$MySubnetB" "$MySubnetC" --tags Key=Name,Value=${!1})