将数组的变量迭代到命令中,该命令本身是变量bash

时间:2017-07-18 12:58:53

标签: linux bash amazon-web-services

我快到了," $ i"是我遇到麻烦的地方。我试过$ {i}," $ i",$ i。我相信有经验的人可以帮助我,我已经为此工作了整整一天。让我疯了。

session_name="Some-sesh_name"
profile_name="ephemeral-${account_id}-${profile_path}-`date +%Y%m%d%H%M%S`"
roles=( "arn:aws:iam::11111111111111:role/role_name" "arn:aws:iam::222222222222:role/role_name" )

sts=( $(
    aws sts assume-role \
    --role-arn "$i" \
    --role-session-name "$session_name" \
    --query 'Credentials.[AccessKeyId,SecretAccessKey,SessionToken]' \
    --output text
) )

for i in "${roles[@]}";
do $sts ; done

aws configure set aws_access_key_id ${sts[0]} --profile ${profile_name}
aws configure set aws_secret_access_key ${sts[1]} --profile ${profile_name}
aws configure set aws_session_token ${sts[2]} --profile ${profile_name}

1 个答案:

答案 0 :(得分:4)

在您定义$i数组时,sts会展开。之后,它就不存在了。

要使aws命令可重用,请使用函数:

roles=( 
    "arn:aws:iam::11111111111111:role/role_name" 
    "arn:aws:iam::222222222222:role/role_name" 
)

sts() {
    aws sts assume-role \
    --role-arn "$1" \
    --role-session-name "$session_name" \
    --query 'Credentials.[AccessKeyId,SecretAccessKey,SessionToken]' \
    --output text
}

for role in "${roles[@]}"; do
    sts "$role"
done

注意在函数中使用$1来检索第一个参数。全局变量$session_name仍然正常

我不明白你对sts数组的看法。在for循环中,您希望将其称为命令,但configure命令采用数组的元素?在假设所有角色之后?您想要使用返回的数据吗?

你想要:

for role in "${roles[@]}"; do
    data=( $(sts "$role") )
    aws configure set aws_access_key_id     "${data[0]}" --profile "$profile_name"
    aws configure set aws_secret_access_key "${data[1]}" --profile "$profile_name"
    aws configure set aws_session_token     "${data[2]}" --profile "$profile_name"
done