प्रत्येक आदेश के बाद, बाहर निकलने का कोड $?चर में पाया जा सकता है ताकि आपके पास कुछ ऐसा हो:
ls -al file.ext
rc=$?; if [[ $rc != 0 ]]; then exit $rc; fi
आपको पाइप्ड कमांड से सावधान रहने की आवश्यकता है क्योंकि $?एकमात्र आपको पाइप में अंतिम तत्व का रिटर्न कोड देता है, कोड में:
ls -al file.ext | sed 's/^/xx: /"
यदि फ़ाइल मौजूद नहीं है, तो त्रुटि कोड वापस नहीं आएगा (क्योंकि sedपाइपलाइन का हिस्सा वास्तव में काम करता है, 0 लौटाता है)।
bashखोल वास्तव में, एक सरणी जो उस स्थिति में सहायता कर सकते हैं प्रदान करता है कि किया जा रहा है PIPESTATUS। इस सरणी में प्रत्येक पाइपलाइन घटक के लिए एक तत्व है, जिसे आप व्यक्तिगत रूप से एक्सेस कर सकते हैं जैसे ${PIPESTATUS[0]}:
pax> false | true ; echo ${PIPESTATUS[0]}
1
ध्यान दें कि यह आपको falseपूरी पाइपलाइन नहीं बल्कि कमांड का परिणाम मिल रहा है । आप पूरी सूची को प्रोसेस करने के लिए भी प्राप्त कर सकते हैं जैसा कि आप फिट देखते हैं:
pax> false | true | false; echo ${PIPESTATUS[*]}
1 0 1
यदि आप पाइपलाइन से सबसे बड़ा त्रुटि कोड प्राप्त करना चाहते हैं, तो आप कुछ इस तरह का उपयोग कर सकते हैं:
true | true | false | true | false
rcs=${PIPESTATUS[*]}; rc=0; for i in ${rcs}; do rc=$(($i > $rc ? $i : $rc)); done
echo $rc
यह PIPESTATUSबदले में प्रत्येक तत्व के माध्यम से जाता है , इसे संग्रहीत करता है rcयदि यह पिछले rcमूल्य से अधिक था ।