प्रत्येक आदेश के बाद, बाहर निकलने का कोड $?
चर में पाया जा सकता है ताकि आपके पास कुछ ऐसा हो:
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
मूल्य से अधिक था ।