我正在尝试创建一个文件并将其分配给具有以下行的变量:
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"