एक पाइप के अंदर $ PIPESTATUS प्राप्त करें


2

मैं क्रॉन-जॉब्स के आउटपुट की जांच करने के लिए एक बैश-स्क्रिप्ट का उपयोग करता हूं:

some-cron-script.sh | check_pipe.sh

check_pipe.sh पाइप को पढ़ता है और यदि यह परिभाषित कीवर्ड (जैसे 'त्रुटि' या 'विफल') अंदर पाता है, तो यह एक ईमेल भेजता है। अब मैं check_pipe.sh में पहली स्क्रिप्ट की निकास-स्थिति की भी जाँच करना चाहूँगा। दुर्भाग्य से, $ {PIPESTATUS [@]} अभी तक सेट नहीं हुआ है जब check_pipe.sh निष्पादित किया गया है। यदि मैं एक नई कमांड में पाइप के बाद PIPESTATUS पूछता हूं, तो दो मान दिए गए हैं - लेकिन मेरे लिए बहुत देर हो चुकी है। कोई मदद?

धन्यवाद!

जवाबों:


1

आउटपुट को एक चर में स्टोर करें (यदि यह बहुत बड़ा नहीं है, शेल चर क्षमता देखें ):

output=$(some-script)
status=$? check-pipe <<<"$output"   # warning: <<< is not POSIX
unset output

वैकल्पिक रूप से (अस्थायी) फ़ाइल का उपयोग करें:

some-script >file
status=$? check-pipe <file
rm file

दोनों ही मामलों में स्टैड check-pipeके some-scriptमाध्यम से आउटपुट प्राप्त होता है और statusपर्यावरण चर के रूप में बाहर निकलने की स्थिति । दो आदेश समानांतर में नहीं चलते हैं।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.