बैश में किसी अन्य कमांड में लाइन द्वारा एक वैरिएबल लाइन पास करना


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 /" के बाद aws कमांड में पास करना चाहता हूँ। मुझे कोई आउटपुट नहीं मिल रहा है आपकी मदद बहुत ही सराहनिय है।


done < <(aws s3 ls ...)
चोराबा

1
डिबग करने का एक तरीका यह है echoकि awsआप उस लाइन से पहले जोड़ दें ताकि आप देख सकें कि कमांड कैसा दिखता है। कुछ इस तरह echo aws s3 cp s3://a-bucket/"$line" 'c:/users/basud/desktop/testerData' --recursive
जेकगोल्ड

@choroba क्या आप अपनी टिप्पणी समझा सकते हैं?
कंफ़ेद्दी

@choroba दिलचस्प जवाब लेकिन कोई पासा नहीं जब मैंने कोड चलाया / = मैं आपकी टिप्पणी में "किया" मान रहा हूं, वह है जो मेरे मूल कोड में "$ फ़ोल्डर" से पहले है
कृष्ण बासुदे

जवाबों:


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
कृष्णा बासुदे

बिना लाइन ब्रेक के जो पढ़ना असंभव है। इसे bash -xआउटपुट के साथ चलाने की कोशिश करें और आउटपुट को प्रश्न के साथ जोड़ दें। या bash -xप्रश्न के लिए आउटपुट के साथ अपना मूल कोड चलाएं ।
RalfFriedl
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.