वहाँ पानी का छींटा खोल में कुछ इसी तरह के विकल्प बैश में 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
इसलिए मैं उस का उपयोग कर सकते है कि अगर बयान के लिए।
वहाँ यह प्राप्त करने के किसी भी वैकल्पिक तरीके है?
धन्यवाद!
क्यों न सिर्फ 'tee' से छुटकारा पाने में है? 'अगर gcc -Wall $$ f.c -o $$ f> $$ f.log 2> & 1; फिर बिल्ली $$ f.log; ./$$f; अन्य vim -o $$ f.c $$ f.log; fi' – rici
@rici धन्यवाद (वैकल्पिक रूप से, Ubunty पर bash' स्थापित '। यह केवल एक apt-get दूर है।)! मैं टी का उपयोग कर रहा था क्योंकि मैं भी स्क्रीन पर मुद्रित stderr आउटपुट चाहता था - मुख्य रूप से यह देखने के लिए कि क्या कोई चेतावनी थी। लेकिन अगर कोई दूसरा रास्ता नहीं है तो मैं शायद आपके द्वारा सुझाए गए अनुसार स्विच करूंगा। बैश स्थापित करने के बारे में: मैंने माना था (बिना किसी शोध के) कि डैश बैश से एक कदम आगे है इसलिए मैं वापस स्विच नहीं करना चाहता था, लेकिन अब इसके बारे में थोड़ी सी बात करना ऐसा लगता है कि ऐसा नहीं हो सकता है। मैं मतभेदों के बारे में थोड़ा और पढ़ूंगा और फिर निर्णय लेगा। आपके पॉइंटर्स दोनों के लिए एक बार फिर धन्यवाद! – Lavya
मैं था आशा व्यक्त की कि सेट -e ऊपर उल्लेख किया है मुझे सेट -ओ pipefail नहीं बल्कि इसलिए की एक पानी का छींटा बराबर के साथ प्रदान करेगा: '$ पानी का छींटा -c 'सेट -e; झूठा | बिल्ली'; $ echo? $ ' –