2017-07-18 110 views
0

我幾乎在那裏,「$我」是我有麻煩的地方。我嘗試過$ {i},「$ i」,$ i。我確信有更多經驗的人可以幫助我,我一直在爲此工作1天。使我抓狂。將數組的變量迭代到命令本身是一個變量bash

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} 
+0

但是'$ i'在使用之前沒有定義--role-arn「$ i」\ –

+0

沒有測試過你的腳本 - 但乍一看,我認爲你需要在sts定義中轉義$ i: 「\ $ I」。否則$ i在sts被定義時被評估。如果你想在循環內進行評估,它需要被轉義。 –

回答

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 

+0

答案正是需要。我不是一名訓練有素的開發人員,但我會根據自己的需要做出決定。你們當然幫助過! Sts不應該是一個數組。 – shdobxr