2013-07-19 2 views
11

वहाँ पानी का छींटा खोल में कुछ इसी तरह के विकल्प बैश में pipefail करने के लिए इसी है?बराबर शैल

या (जो सेट -e होगा, लेकिन उस पर बाहर निकलने नहीं) करता है, तो पाइप में से कोई एक आदेश असफल एक गैर शून्य स्थिति होने का कोई दूसरा रास्ता नहीं।

यह स्पष्ट करने के लिए यहां मैं क्या हासिल करना चाहते का एक उदाहरण है:

एक नमूना डिबगिंग makefile में, मेरा नियम इस तरह दिखता है:

set -o pipefail; gcc -Wall $$f.c -o $$f 2>&1 | tee err; if [ $$? -ne 0 ]; then vim -o $$f.c err; ./$$f; fi; 

मूल रूप से इसे चलाता त्रुटि फ़ाइल को खोलता है और त्रुटि पर स्रोत फ़ाइल और कोई त्रुटि नहीं होने पर प्रोग्राम चलाता है। मुझे कुछ टाइपिंग बचाता है। ऊपर स्निपेट बैश पर अच्छी तरह से काम करता है लेकिन मेरी नई उबंटी प्रणाली डैश का उपयोग करती है जो पाइपफेल विकल्प का समर्थन नहीं करती है।

मैं मूल रूप से एक विफलता स्थिति चाहते हैं, तो नीचे दिए गए आदेशों की समूह का पहला हिस्सा असफल:

gcc -Wall $$f.c -o $$f 2>&1 | tee err 

इसलिए मैं उस का उपयोग कर सकते है कि अगर बयान के लिए।

वहाँ यह प्राप्त करने के किसी भी वैकल्पिक तरीके है?

धन्यवाद!

+1

क्यों न सिर्फ 'tee' से छुटकारा पाने में है? 'अगर gcc -Wall $$ f.c -o $$ f> $$ f.log 2> & 1; फिर बिल्ली $$ f.log; ./$$f; अन्य vim -o $$ f.c $$ f.log; fi' – rici

+0

@rici धन्यवाद (वैकल्पिक रूप से, Ubunty पर bash' स्थापित '। यह केवल एक apt-get दूर है।)! मैं टी का उपयोग कर रहा था क्योंकि मैं भी स्क्रीन पर मुद्रित stderr आउटपुट चाहता था - मुख्य रूप से यह देखने के लिए कि क्या कोई चेतावनी थी। लेकिन अगर कोई दूसरा रास्ता नहीं है तो मैं शायद आपके द्वारा सुझाए गए अनुसार स्विच करूंगा। बैश स्थापित करने के बारे में: मैंने माना था (बिना किसी शोध के) कि डैश बैश से एक कदम आगे है इसलिए मैं वापस स्विच नहीं करना चाहता था, लेकिन अब इसके बारे में थोड़ी सी बात करना ऐसा लगता है कि ऐसा नहीं हो सकता है। मैं मतभेदों के बारे में थोड़ा और पढ़ूंगा और फिर निर्णय लेगा। आपके पॉइंटर्स दोनों के लिए एक बार फिर धन्यवाद! – Lavya

+1

मैं था आशा व्यक्त की कि सेट -e ऊपर उल्लेख किया है मुझे सेट -ओ pipefail नहीं बल्कि इसलिए की एक पानी का छींटा बराबर के साथ प्रदान करेगा: '$ पानी का छींटा -c 'सेट -e; झूठा | बिल्ली'; $ echo? $ ' –

उत्तर

6

PIPESTATUS/pipefail की POSIX कार्यान्वयन के लिए "स्टॉक" जवाब comp.unix.shell FAQ Q11

+3

इस सवाल का जवाब नहीं है। यह दस्तावेज़ वर्णन करता है कि पाइप किए गए आदेशों के बाहर निकलने वाले कोड को अलग-अलग चर में कैसे रखा जाए। लेकिन यह हाथ से सवाल से बहुत दूर है, जो चाहता है कि जैसे ही कोई पाइप कमांड विफल हो जाए, शैल स्वचालित रूप से बाहर निकल जाए। "आरटीएफएम" केवल तभी वैध है जब "एफएम" वास्तव में प्रश्न का उत्तर देता है। – vog