파일을 생성하고 다음 줄을 사용하여 변수에 할당하려고 합니다.
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"