Bash의 변수를 한 줄씩 다른 명령으로 전달


1

txt 파일을 읽는 코드가 있으며 그 줄을 명령으로 읽어야합니다. 그런 다음 해당 명령의 출력도 한 행씩 다른 명령으로 읽어야합니다. 내 외부 루프는 작동하지만 에코를 사용하여 테스트했지만 중첩 루프는 작동하지 않습니다.

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

"폴더"로 읽히는 첫 번째 행의 출력은 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

경로 이름에 추가하기 위해 "a-bucket /"다음에 "folder"의 각 줄을 aws 명령에 전달하고 싶습니다. 계속 출력이 없습니다. 도와 주셔서 감사합니다.


done < <(aws s3 ls ...)
choroba

1
이를 디버깅하는 한 가지 방법은 echo해당 aws행 앞에 추가 하여 명령이 어떻게 보이는지 확인할 수 있습니다. 같은 것 echo aws s3 cp s3://a-bucket/"$line" 'c:/users/basud/desktop/testerData' --recursive.
JakeGould

@choroba 의견을 설명해 주시겠습니까?
색종이

@choroba 흥미로운 대답하지만 난 코드를 실행할 때 어떤 주사위 = / 나는 당신의 의견에 "완료"를 없다고 가정하고 내 원래 코드에서 "$ 폴더"를 앞에 하나입니다
크리슈나 Basude

답변:


0

코드가 작동해야합니다

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

그러나 당신의 경우에는 이것을 사용합니다 :

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 

원본 스크립트 (또는 다른 스크립트)를 디버깅하려면로 실행하십시오 bash -x.


불행히도 이것도 작동하지 않았다 = / 여기 내가 실행 한 코드가있다 : #!/bin/bash while read p; do aws s3 ls s3://a-bucket/users/ --recursive | grep ${p} | cut -c 32- | while read -r line do echo $line aws s3 cp s3://a-bucket/"$line" 'c:/users/basud/desktop/testerData' --recursive done done < testIDs.txt
Krishna Basude

줄 바꿈이 없으면 읽을 수 없습니다. 로 실행 bash -x하고 질문에 출력을 추가하십시오. 또는 원본 코드를 실행 bash -x하고 결과를 질문에 추가하십시오.
RalfFriedl
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.