Passando uma variável linha a linha em outro comando no Bash

1

Eu tenho código que lê um arquivo txt e deve ler as linhas dele em um comando. Em seguida, a saída desse comando também deve ser lido linha por linha em outro comando. Meu loop externo funciona (testei-o usando echo), mas meu loop aninhado não:

#!/bin/bash

while read p; do

    folder="$(aws s3 ls s3://a-bucket/users/ --recursive | grep ${p} | cut -c 32-)"

    while read -r line
    do
        aws s3 cp s3://a-bucket/"$line" 'c:/users/basud/desktop/testerData' --recursive
    done <<< "$folder"

done < testIDs.txt

A saída da primeira linha que é lida para "pasta" é semelhante a essa para cada linha de testIDs.txt:

users/3e8c95b4-c5ee-4edc-954e-6d988d30557e/111BEF99-5AB6-486A-ABD5-A4682CE0D491-LEFT.zip
users/3e8c95b4-c5ee-4edc-954e-6d988d30557e/111BEF99-5AB6-486A-ABD5-A4682CE0D491-RIGHT.zip

Eu quero passar cada linha de "pasta" para o comando aws depois de "um balde /" para adicionar ao nome do caminho. Eu continuo recebendo nenhuma saída. Sua ajuda é muito apreciada.

    
por Krishna Basude 30.08.2018 / 02:32

1 resposta

0

Seu código deve funcionar

$ folder="$(echo 1; echo 2)"; while read -r line; do echo "line: $line"; done <<< "$folder"
line: 1
line: 2

Mas no seu caso eu usaria isso:

aws s3 ls s3://a-bucket/users/ --recursive | grep ${p} | cut -c 32- |
while read -r line
do
    aws s3 cp s3://a-bucket/"$line" 'c:/users/basud/desktop/testerData' --recursive
done 

Para depurar seu script original (ou qualquer outro), execute-o com bash -x .

    
por 30.08.2018 / 06:34