2012-11-15 30 views
5

विशिष्ट मामले:एक पाइप में प्रोग्राम कैसे निष्पादित नहीं किया जाता है जब तक कि पहला डेटा tempfile के बिना नहीं पहुंच जाता?

generate_data | curl -T - http://someserver/path 

इसका मतलब है कि, मैं एक प्रोग्राम है जो stdout में एक आउटपुट उत्पन्न है, और मुझे कर्ल के साथ एक दूरस्थ सर्वर पर कि डाल दिया।

समस्या

कि generate_data बहुत अधिक समय लगता है, सर्वर 408

मुझे पता है कि पाइप, डेटा तैयार हो जाने की प्रतीक्षा किए बिना सभी आदेश पर अमल तो मेरे अगले चरण था वापस करने के लिए जा रहा है है:

generate_data | (sleep 20 ; curl -T - http://someserver/path) 

जेनर_डेटा चलाने के लिए अधिकतम समय की आवश्यकता दो बार थी, इसलिए सभी चीजें ठीक हैं। लेकिन ... यह एक इष्टतम समाधान नहीं है।

मुझे पता है कि मैं पढ़ने के साथ कुछ और जटिल बना सकता हूं, और एक उचित खोल स्क्रिप्ट, लेकिन यह महसूस कर रहा हूं कि मुझे कुछ याद आ रही है।

तो ... क्या मैं sleep 20; के बजाय एक अस्थायी फ़ाइल बनाने के बिना उपयोग कर सकते हैं?

+6

कितना डेटा होने जा रहा है? एक अस्थायी फ़ाइल लिखने के बारे में, उदा। 'gener_data> tempfile; curl -T tempfile ... ' –

+0

आभारी रहें कि 'नींद' काम करता है! ;-) आप सभी को शुभकामनायें। – shellter

उत्तर

2
generate_data > /tmp/generated_data; cat /tmp/generated_data | curl -T - http://someserver/path 
+0

क्षमा करें, मैंने यह प्रश्न निर्दिष्ट नहीं किया है कि मैं एक tempfile का उपयोग नहीं करना चाहता। एक टेम्पफाइल का उपयोग करना, साफ समाधान सहित उचित समाधान, कुछ ऐसा होगा। 'gener_data>/tmp/asdf && curl -T/tmp/asdf http: // सर्वर/पथ; ([-f/tmp/asdf && rm/tmp/asdf) '' – Guillermo

+0

क्या आप चाहते हैं कि जैसे ही पहला डेटा उत्पन्न होता है या आप डेटा को समाप्त होने तक प्रतीक्षा करना चाहते हैं? दूसरे शब्दों में, क्या समस्या है कि आप डेटा उत्पन्न करने में बहुत अधिक समय ले रहे हैं या कोई आउटपुट शुरू होने से पहले कुछ प्रक्रिया होती है? – mbarrows