2 votes

Passage d'une variable ligne par ligne dans une autre commande en Bash

J'ai un code qui lit un fichier txt et qui est censé lire les lignes de ce fichier dans une commande. Ensuite, la sortie de cette commande doit également être lue ligne par ligne dans une autre commande. Ma boucle externe fonctionne (je l'ai testée en utilisant echo) mais ma boucle imbriquée ne fonctionne pas :

#!/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

La sortie de la première ligne qui est lue dans "folder" ressemble à ceci pour chaque ligne 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

Je veux passer chaque ligne de "folder" dans la commande aws après "a-bucket/" pour l'ajouter au nom du chemin. Je n'obtiens aucun résultat. Votre aide est très appréciée.

0voto

RalfFriedl Points 1514

Votre code devrait fonctionner

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

Mais dans votre cas, j'utiliserais ceci :

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 

Pour déboguer votre script original (ou tout autre), exécutez-le avec bash -x .

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X