2010-12-17 11 views
6

मुझे वर्तमान में आश्चर्य है कि जंजीर कमांड के लिए त्रुटि प्रबंधन कैसे करें।एक बैश स्क्रिप्ट में जंजीर आदेश (पाइप) के साथ त्रुटि प्रबंधन?

cat file | gzip >/tmp/test 

अगर बिल्ली विफल रहता है (क्योंकि उदाहरण के लिए फ़ाइल याद आ रही है), gzip अभी भी निष्पादित किया जाता है और में इसलिए पिछले संग्रहीत बाहर निकलें कोड: निम्नलिखित मेरी समस्या आसान प्रदर्शित करने के लिए सिर्फ एक उदाहरण है $? है। सेट- इस मामले में या तो मदद नहीं करेगा।

मुझे आश्चर्य है कि इसके लिए सबसे अच्छा समाधान क्या है?

धन्यवाद!

+0

क्या आपने '$ PIPESTATUS' की कोशिश की है? इसे बाश के लिए काम करना चाहिए। – khachik

+0

मुझे यह भी पता नहीं था कि यह अस्तित्व में है। धन्यवाद! – aurora

उत्तर

8

इस प्रयास करें:

trap 'echo "ERR caught"' ERR 
set -o pipefail 
cat file | gzip >/tmp/test 

आउटपुट फ़ाइल अभी भी बनाया जाएगा (निर्माण समानांतर में किया जाता है) और gzip चलाया जाएगा, लेकिन आप सफाई कर सकते हैं। यह त्रुटि देखने के लिए ${PIPESTATUS[@]} सरणी का उपयोग करें। त्रुटि के बारे में अतिरिक्त जानकारी के लिए आप $BASH_COMMAND और $BASH_LINENO का उपयोग कर सकते हैं।

+0

वाह - यह बहुत अच्छा है। मुझे इस संभावना के बारे में पता नहीं था। बहुत बहुत धन्यवाद! – aurora

संबंधित मुद्दे