ファイルを生成し、次の行を使用して変数に割り当てようとします。
aws_key="company-lab"
source_dir="source_files"
aws_role_list=$(aws iam list-roles --profile="$aws_key" | jq -r '.Roles[].RoleName' > "$source_dir"/aws-"$aws_key"-role-list.txt)
しかし、「$aws_role_list」変数を使用すると空です。
echo "echo the file"
echo "$aws_role_list"
bash -x を使用してスクリプトを実行すると、次のような結果になります。
+ aws_role_list=
次のようにファイルをリストします。
echo "listing the file"
ls -lh "$aws_role_list"
あなたのため:
+ ls -lh ''
ls: cannot access '': No such file or directory
私は何が間違っていましたか? aws_role_list変数を正しく使用するには?
答え1
私はAWSの経験はありませんが、コマンド出力をファイルにリダイレクトしていることがわかります。
aws iam list-roles --profile="$aws_key" |
jq -r '.Roles[].RoleName' > "$source_dir"/aws-"$aws_key"-role-list.txt
出力はファイルに移動するため、使用時に何も返されないため、空であることがvar=$(command)
合理的です。var
command
"$source_dir"/aws-"$aws_key"-role-list.txt
したがって、次のいずれかが必要です。
aws_role_list=$(aws iam list-roles --profile="$aws_key" | jq -r '.Roles[].RoleName')
またはこれ:
aws iam list-roles --profile="$aws_key" |
jq -r '.Roles[].RoleName' > "$source_dir"/aws-"$aws_key"-role-list.txt
aws_role_list=$(cat "$source_dir"/aws-"$aws_key"-role-list.txt)
ファイルの内容の代わりにファイル名を変数にインポートするには、次のものが必要です。
aws_key="company-lab"
source_dir="source_files"
aws_role_list="$source_dir"/aws-"$aws_key"-role-list.txt
aws iam list-roles --profile="$aws_key" |
jq -r '.Roles[].RoleName' > "$aws_role_list"