具有第三个arg的bash函数是一个数组

越南的

我正在尝试编写一个执行以下操作的bash函数:

  • 如果没有第三个参数,请运行命令。
  • 如果有第三个参数,请从第三个参数中获取每个参数并运行命令。

我遇到的问题是,如果我有多个参数,则我不想一直传递--capabilities CAPABILITY_IAMelse语句中的命令的最后一位

An error occurred (InsufficientCapabilitiesException) when calling the CreateStack operation: Requires capabilities : [CAPABILITY_NAMED_IAM]
// that means I need to pass in --capabilities CAPABILITY_IAM

有没有办法告诉bash:嘿,从第3个参数中取出所有args,然后添加--capabilities CAPABILITY_IAM之后的参数?像在JavaScript中一样,我可以这样做:

function allTogetherNow(a, b, ...c) {
  console.log(`${a}, ${b}, ${c}. Can I have a little more?`);
}

allTogetherNow('one', 'two', 'three', 'four')

这是我的功能:

cloudformation_create() {
    if [ -z "$3" ]; then
        aws cloudformation create-stack --stack-name "$1" --template-body file://"$2" --capabilities CAPABILITY_IAM
    else
        aws cloudformation create-stack --stack-name "$1" --template-body file://"$2" --parameters "${@:3}" --capabilities CAPABILITY_IAM
    fi
}

如果不使用bash函数,则第3个参数等等看起来像这样:

aws cloudformation create-stack --stack-name MY_STACK_NAME --template-body file://MY_FILE_NAME --parameters ParameterKey=KeyPairName,ParameterValue=TestKey ParameterKey=SubnetIDs,ParameterValue=SubnetID1 --capabilities CAPABILITY_IAM

2019年5月22日更新:

遵循Dennis Williamson在下面的回答。我试过了:

  • 以AWS方式传递参数:
cloudformation_create STACK_NAME FILE_NAME ParameterKey=KeyPairName,ParameterValue=TestKey ParameterKey=SubnetIDs,ParameterValue=SubnetID1

得到错误:

An error occurred (ValidationError) when calling the CreateStack operation: Parameters: [...] must have values
  • 作为字符串传递:
cloudformation_create STACK_NAME FILE_NAME "ParameterKey=KeyPairName,ParameterValue=TestKey ParameterKey=SubnetIDs,ParameterValue=SubnetID1"

得到错误:

An error occurred (ValidationError) when calling the CreateStack operation: ParameterValue for ... is required
  • 不使用ParameterKey传递ParameterValue
cloudformation_create STACK_NAME FILE_NAME KeyPairName=TestKey SubnetIDs=SubnetID1

得到错误:

Parameter validation failed:
Unknown parameter in Parameters[0]: "PARAM_NAME", must be one of: ParameterKey, ParameterValue, UsePreviousValue, ResolvedValue
// list of all the params with the above error
  • 不带ParameterKeyParameterValue作为字符串传递得到错误:
arameter validation failed:
Unknown parameter in Parameters[0]: "PARAM_NAME", must be one of: ParameterKey, ParameterValue, UsePreviousValue, ResolvedValue

我尝试了亚历克斯·哈维的答案,并得到了:

An error occurred (ValidationError) when calling the CreateStack operation: Template format error: unsupported structure.
越南的

首先,谢谢大家的帮助。

我已经意识到了这个问题(以及我的错误):

AWS返回了错误,Requires capabilities : [CAPABILITY_NAMED_IAM]我的函数具有[CAPABILITY_IAM]取决于模板以及与创建IAM相关的参数,[CAPABILITY_NAMED_IAM]或者[CAPABILITY_IAM]是必需的。我发现这里的答案很有帮助。

因此,就我而言,bash函数很好,对于我尝试创建的模板,我需要传递--capabilities CAPABILITY_NAMED_IAM我已经尝试过了,而且效果很好。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

两个表之间的关系,中间还有一个可选的第三个表

基于第三个数组对多维数组进行排序

提取第三个,最后一个和最后一个期间之间的所有文本

我想比较两个numpy数组并创建第三个数组

将2个阵列合并为第三个阵列,其中一个阵列具有不变的唯一键

将值从两个数组转换为新的第三个数组

使用2个数组在numpy中填充第三个数组

PHP将2个数组合并为第三个数组

如何从具有公共字段的三个数组中制作一个数组

如何将两个javascript函数与具有条件的第三个函数合并?

函数(第一个数字的最后一位)*(第二个数字的最后一位)=(第三个数字的最后一位)[PYTHON]

检索和更新函数,用于在第三个数组中求和两个数组

将值从numpy数组复制到另一个数组,具体取决于第三个值

如何从具有可选第三个参数的另一个函数调用函数?

显示每个数组的第一个和第三个值

元素的总和到第三个数组

在前两个数组的基础上创建第三个数组

使用第三个数组作为枢轴对三个数组进行排序

具有第三个参数(即比较器函数)的重载sort()如何工作?

选择具有第一个条件的第三个表 [SQL]

在与前两个具有相同组合长度的第三个数组内打印两个数组

如何复制数组中的元素但不在第三个数组中的另一个数组中

将两个数组 php 与第三个数组进行比较

将两个不同数组的元素合并到第三个数组

如何添加两个数组以生成第三个数组?

我想减去 2 个数组并得到第三个数组,它由第一个数组的剩余元素组成

Python:根据第三个数组对两个数组进行排序

php 创建一个带有额外值的第三个数组,其中的键与两个现有数组相匹配

比较2个数组并在python中写入第三个的最有效方法