2010-12-10 15 views
9

मैं एक चर के आदेशों की एक श्रृंखला का परिणाम भेजने के लिए करना चाहते हैं:पाइप स्थिति

variable=$(a | few | commands) 

हालांकि, आदेश प्रतिस्थापन रीसेट करता है PIPESTATUS, इसलिए मैं का निरीक्षण नहीं कि वह कहाँ गलत हो गया तथ्य के बाद।

variable_file=$(mktemp) || exit 1 
a | few | commands > $variable_file 
exit_codes="${PIPESTATUS[*]}" 
variable=$(<$variable_file) 

वहाँ एक और अधिक सुरुचिपूर्ण समाधान है: एक समाधान mktemp का उपयोग करें और वहाँ अस्थायी रूप से परिणाम डाल करने के लिए हो सकता है?

+0

यह वास्तव में एक अच्छा सवाल है। मुझे लगता है कि आपके से कोई बेहतर समाधान नहीं है, मुझे आशा है कि कोई मुझे गलत साबित करेगा ;-) आप शायद "सेट-पाइपफेल" के बारे में जानते हैं, लेकिन फिर भी यह आपके प्रश्न के लिए ऑर्थोगोनल है। – tokland

+0

ठीक है अब मैं चिंतित हूं क्योंकि मैं वही करता हूं जो आप करते हैं ... और यह काम करता है ... लेकिन अगर कुछ और सुरुचिपूर्ण है ... मुझे यह है ... – Cipi

+1

यह देखें [प्रश्न] (http:/अधिक विचारों के लिए /stackoverflow.com/questions/3450960/using-xargs-to-assign-stdin-to-a-variable)। यह भी देखें [http://stackoverflow.com/questions/2413166/bash-redirect-and-append-stdout-and-stderr-to-file-and-terminal)। –

उत्तर

7

किंडा हैकी लेकिन मुझे लगता है कि आप इसे इस तरह से परेशान कर सकते हैं।

variable=$(a | few | commands; echo ": ${PIPESTATUS[*]}") 
PIPESTATUS=(${variable##*: }) 
variable=${variable%:*} 
variable=${variable%$'\n'} 
+0

+1, जब तक आप जानते हैं कि आदेशों से क्या अपेक्षा की जानी चाहिए। – l0b0

+0

अगर आउटपुट से 'ए | कुछ | आदेश 'की आवश्यकता है, क्या स्थिति फ़ाइल डिस्क्रिप्टर 3 के माध्यम से भेजी जा सकती है? – jozxyqk

+0

@jozxyqk आउटपुट को '$ चर' में पकड़ा गया है (मिश्रित होने और विभाजित होने के बाद)। – ephemient