आमतौर पर, हमें केवल एक तर्क पास करना होगा:
echo abc | cat
echo abc | cat some_file -
echo abc | cat - some_file
क्या दो तर्कों को पारित करने का एक तरीका है? कुछ इस तरह
{echo abc , echo xyz} | cat
cat `echo abc` `echo xyz`
मैं सिर्फ पहले एक फ़ाइल में दोनों परिणामों को स्टोर कर सकता था
echo abc > file1
echo xyz > file2
cat file1 file2
लेकिन फिर मैं गलती से किसी फ़ाइल को अधिलेखित कर सकता हूं, जो ठीक नहीं है। यह एक गैर-संवादात्मक स्क्रिप्ट में जा रहा है। मूल रूप से, मुझे cat
एक फ़ाइल पर लिखने के बिना दो मनमाना आदेशों के परिणामों को पारित करने का एक तरीका चाहिए ।
अद्यतन: क्षमा करें, उदाहरण समस्या का सामना करता है। जबकि { echo abc ; echo xyz ; } | cat
काम करने लगता है, आउटपुट एस के कारण है echo
, न कि cat
।
एक बेहतर उदाहरण वह होगा { cut -f2 -d, file1; cut -f1 -d, file2; } | paste -d,
जो उम्मीद के मुताबिक काम नहीं करता है।
साथ में
file1:
a,b
c,d
file2:
1,2
3,4
अपेक्षित उत्पादन है:
b,1
d,3
समाधान किया गया:
प्रक्रिया प्रतिस्थापन का उपयोग करें :cat <(command1) <(command2)
वैकल्पिक रूप से, नामित पाइप का उपयोग करें mkfifo
:
mkfifo temp1
mkfifo temp2
command1 > temp1 &
command2 > temp2 &
cat temp1 temp2
कम सुरुचिपूर्ण और अधिक वर्बोज़, लेकिन ठीक काम करता है, जब तक कि आप सुनिश्चित करें कि temp1 और temp2 हाथ से पहले मौजूद नहीं हैं।