यहां अधिकांश समाधानों की कोशिश करने के बाद, मुझे जो सबसे आसान चीज मिली वह स्पष्ट थी - एक टेम्प फाइल का उपयोग करना। मुझे यकीन नहीं है कि आप अपने कई लाइन आउटपुट के साथ क्या करना चाहते हैं, लेकिन फिर आप इसे पढ़कर लाइन का उपयोग करके लाइन से निपट सकते हैं। केवल एक चीज के बारे में जो आप वास्तव में नहीं कर सकते हैं वह आसानी से सभी को एक ही चर में चिपका सकता है, लेकिन अधिकांश व्यावहारिक उद्देश्यों के लिए यह आसान तरीका है।
./myscript.sh > /tmp/foo
while read line ; do
echo 'whatever you want to do with $line'
done < /tmp/foo
अनुरोधित कार्रवाई करने के लिए त्वरित हैक:
result=""
./myscript.sh > /tmp/foo
while read line ; do
result="$result$line\n"
done < /tmp/foo
echo -e $result
ध्यान दें कि यह एक अतिरिक्त रेखा जोड़ता है। यदि आप इस पर काम करते हैं, तो आप इसके चारों ओर कोड कर सकते हैं, मैं अभी बहुत आलसी हूं।
EDIT: जबकि यह मामला पूरी तरह से अच्छी तरह से काम करता है, इसे पढ़ने वाले लोगों को इस बात की जानकारी होनी चाहिए कि आप आसानी से लूप के अंदर अपने स्टड को स्क्वाश कर सकते हैं, इस प्रकार यह आपको एक स्क्रिप्ट देता है जो एक लाइन, क्लियर स्टड और एग्जिट को चलाएगा। जैसे शश ऐसा करेगा कि मैं सोचूं? मैंने अभी हाल ही में इसे देखा, अन्य कोड उदाहरण यहाँ: /unix/24260/reading-lines-from-a-file-with-bash-for-vs-ward
एक और बार! इस बार एक अलग फाइलहैंडल के साथ (स्टड, स्टडआउट, स्टेडर 0-2 हैं, इसलिए हम उपयोग कर सकते हैं और 3 या उससे अधिक बैश में हैं)।
result=""
./test>/tmp/foo
while read line <&3; do
result="$result$line\n"
done 3</tmp/foo
echo -e $result
तुम भी mktemp का उपयोग कर सकते हैं, लेकिन यह सिर्फ एक त्वरित कोड उदाहरण है। मस्कैम्प के लिए उपयोग की तरह दिखता है:
filenamevar=`mktemp /tmp/tempXXXXXX`
./test > $filenamevar
इसके बाद $ फ़ाइलनाम का उपयोग करें जैसे कि आप किसी फ़ाइल का वास्तविक नाम होगा। शायद यहाँ समझाने की ज़रूरत नहीं है लेकिन किसी ने टिप्पणी में शिकायत की।