Bashでファイルが見つからない - ファイルを生成して変数に割り当てる

Bashでファイルが見つからない - ファイルを生成して変数に割り当てる

ファイルを生成し、次の行を使用して変数に割り当てようとします。

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)合理的です。varcommand"$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"

おすすめ記事