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"

관련 정보