প্রতিটি কমান্ডের পরে, প্রস্থান কোডটি $?
ভেরিয়েবলে পাওয়া যায় যাতে আপনার মতো কিছু থাকে:
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
মানের চেয়ে বেশি হয় তবে এটি সঞ্চয় করে ।