सवाल पाइपलाइनों का उपयोग करते समय स्थिति कोड पुनर्प्राप्त करना


मैं बैश स्क्रिप्ट में निम्न आदेश चलाता हूं:

cd SomeDir && (sh -c "$CMD_STR") 2>&1 | some_filtering | sed -u -e ....

अर्थात। मैं कुछ डीआईआर में सीएमडी_स्ट्रेट चलाता हूं (वास्तव में सीएमडी_स्ट्रेट 'मेक' या 'लक्ष्य बनाएं'), कुछ सीएमडी_स्ट्रेट के आउटपुट पर फ़िल्टरिंग करते हैं और फिर कुछ प्रतीकों को 'sed' द्वारा प्रतिस्थापित करते हैं।

यदि CMD_STR इसे मेरी स्क्रिप्ट से वापस करने में विफल रहता है तो मुझे CMD_STR के स्टेटस कोड को पुनर्प्राप्त करने की आवश्यकता है। मैं यह कैसे कर सकता हूं?


2
2017-10-09 05:55


मूल




जवाब:


समाधान कमांड चलाने से पहले 'पाइपफेल' विकल्प सेट करना है।

http://www.gnu.org/software/bash/manual/bashref.html

यदि पाइपफेल सक्षम है, तो पाइपलाइन की वापसी स्थिति का मूल्य है   गैर-शून्य स्थिति, या शून्य से बाहर निकलने के लिए अंतिम (दाएं) कमांड   यदि सभी आदेश सफलतापूर्वक बाहर निकलें।

तो अब मेरी लिपि निम्न की तरह दिखती है:

set -o pipefail
cd SomeDir && (sh -c "$CMD_STR") 2>&1 | some_filtering | sed -u -e ....
exit $?

2
2017-10-09 08:25





बैश खोल में अंतिम निकास स्थिति कोड देखने के लिए, आप इसका उपयोग कर सकते हैं:

echo $?

साथ ही आपने कहा है कि आप उस कमांड को स्क्रिप्ट में उपयोग करते हैं, इसलिए, स्टेटस कोड पुनर्प्राप्त करने के लिए, आप उस स्क्रिप्ट को निम्नानुसार चला सकते हैं:

sh -x /path/to/script

या

bash -x /path/to/script

अन्य विकल्प का उपयोग करना है set -x तथा set +x स्क्रिप्ट के कुछ हिस्सों के लिए स्टेटस कोड पुनर्प्राप्त करने के लिए स्क्रिप्ट में आदेश।

के बारे में अधिक:


0
2017-10-09 06:30



धन्यवाद, लेकिन यह काम नहीं करता है। "निकास स्थिति" पाइपलाइन में निर्दिष्ट अंतिम आदेश की निकास स्थिति "के कारण है। 'मैन श' देखें। तो यह sed's है, सीएमडी नहीं है। - Rom098
@Roman कृपया सभी जवाब पढ़ें, न केवल पहली पंक्ति। - Radu Rădeanu