প্রথমটি সফল হওয়া পর্যন্ত আপনি যদি দ্বিতীয় কমান্ডটি এগিয়ে যেতে চান না, তবে আপনাকে সম্ভবত অস্থায়ী ফাইলগুলি ব্যবহার করতে হবে। এর সহজ সংস্করণটি হ'ল:
tmp=${TMPDIR:-/tmp}/mine.$$
if ./a > $tmp.1
then
if ./b <$tmp.1 >$tmp.2
then
if ./c <$tmp.2
then : OK
else echo "./c failed" 1>&2
fi
else echo "./b failed" 1>&2
fi
else echo "./a failed" 1>&2
fi
rm -f $tmp.[12]
'1> & 2' পুনঃনির্দেশটি সংক্ষেপে '> & 2'ও করা যেতে পারে; তবে, এমকেএস শেলের একটি পুরানো সংস্করণ পূর্ববর্তী '1' ছাড়াই ত্রুটি পুনর্নির্দেশটিকে ভুলভাবে ছড়িয়ে দিয়েছে তাই আমি বয়সের জন্য নির্ভরযোগ্যতার জন্য সেই দ্ব্যর্থহীন স্বরলিপিটি ব্যবহার করেছি।
আপনি কিছু বাধা দিলে ফাইলগুলি ফাঁস হয়। বোমা-প্রমাণ (আরও কম) শেল প্রোগ্রামিং ব্যবহার করে:
tmp=${TMPDIR:-/tmp}/mine.$$
trap 'rm -f $tmp.[12]; exit 1' 0 1 2 3 13 15
...if statement as before...
rm -f $tmp.[12]
trap 0 1 2 3 13 15
প্রথম ট্র্যাপ লাইনটি 'কমান্ডগুলি চালান' rm -f $tmp.[12]; exit 1
বলে যখন 1 সিগন্যাল, 2 স্বাক্ষর, 3 স্বাক্ষর, 13 সাইনপিপ, বা 15 সাইনটারম ঘটে, বা 0 (যখন শেলটি কোনও কারণে প্রস্থানিত হয়)। আপনি যদি একটি শেল স্ক্রিপ্ট লিখছেন তবে চূড়ান্ত ফাঁদটি কেবল 0-তে ফাঁদটি সরিয়ে ফেলতে হবে, এটি শেল প্রস্থান ট্র্যাপ (প্রক্রিয়াটি যেভাবেই শেষ হতে চলেছে বলে আপনি অন্যান্য সংকেতগুলিকে জায়গায় রেখে দিতে পারেন)।
মূল পাইপলাইনে, 'গ' এর পক্ষে 'এ' শেষ হওয়ার আগে 'বি' থেকে ডেটা পড়া সম্ভব হবে - এটি সাধারণত কাম্য হয় (উদাহরণস্বরূপ এটি একাধিক কোরকে কাজ করতে দেয়)। যদি 'বি' একটি 'সাজান' পর্যায়ে থাকে, তবে এটি প্রযোজ্য নয় - 'বি' এর কোনও আউটপুট জেনারেট করার আগে তার সমস্ত ইনপুট দেখতে হবে।
কোন কমান্ড (গুলি) ব্যর্থ হয়েছে তা আপনি যদি সনাক্ত করতে চান তবে আপনি এটি ব্যবহার করতে পারেন:
(./a || echo "./a exited with $?" 1>&2) |
(./b || echo "./b exited with $?" 1>&2) |
(./c || echo "./c exited with $?" 1>&2)
এটি সহজ এবং প্রতিসম: এটি 4-অংশ বা এন-অংশ পাইপলাইন পর্যন্ত প্রসারিত করা তুচ্ছ।
'সেট-ই' দিয়ে সাধারণ পরীক্ষা-নিরীক্ষা সাহায্য করে না।
&&|
যার অর্থ "পূর্ববর্তী কমান্ডটি সফল হলে কেবল পাইপটি চালিয়ে যান"। আমি মনে করি আপনিও থাকতে পারেন|||
যার অর্থ "পূর্ববর্তী কমান্ড ব্যর্থ হলে পাইপ চালিয়ে যান" (এবং সম্ভবত বাশ 4 এর মতো ত্রুটি বার্তাটি পাইপ করা হবে|&
)।