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),它是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"

相关内容