Arquivo ausente no Bash - Cria um arquivo e o atribui a uma variável

0

Estou tentando criar um arquivo e atribuí-lo a uma variável com estas linhas:

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)

Mas quando uso a variável "$ aws_role_list" está vazia:

echo "echo the file"
echo "$aws_role_list"

A execução do script com o bash -x oferece:

+ aws_role_list=

E listando o arquivo assim:

echo "listing the file"
ls -lh "$aws_role_list"

Dá a você:

+ ls -lh ''
ls: cannot access '': No such file or directory

O que estou fazendo de errado? Como posso usar a variável aws_role_list corretamente?

    
por user99201 09.10.2018 / 16:14

1 resposta

3

Não tenho experiência com a AWS, mas vejo que você está redirecionando a saída de um comando para um arquivo:

aws iam list-roles --profile="$aws_key" | 
    jq -r '.Roles[].RoleName' > "$source_dir"/aws-"$aws_key"-role-list.txt

Como a saída está indo para um arquivo, quando você usa var=$(command) , é razoável que var esteja vazio porque command não retorna nada: está tudo indo para "$source_dir"/aws-"$aws_key"-role-list.txt .

Então, você quer isso:

aws_role_list=$(aws iam list-roles --profile="$aws_key" | jq -r '.Roles[].RoleName')

Ou isto:

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)

Se você está tentando obter o nome do arquivo e não seu conteúdo para a variável, então você quer isto:

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"
    
por 09.10.2018 / 16:22