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



我快到了,"$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}

$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 循环中,您想将其作为命令调用,但配置命令采用数组的元素?在所有角色都承担之后?是否要改用返回的数据?

你想要吗:

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

最新更新