كيفية الخروج من جميع البرامج النصية للاتصال في باش؟
سؤال
دعنا نقول أن لدي البرامج النصية التالية
رماد
echo in a
if test 1 -ne 2; then
echo oops
exit 1
fi
ب
echo in b
./a.sh
echo in b 2
عند تشغيل B.Sh، أريد ذلك للخروج إذا خرج A.Sh. كيف أقوم بهذا العمل؟
(الناتج الحالي هو
in b
in a
oops
in b 2
وهذا ليس ما أريد)
شكرا يا ريفكا
المحلول
تحقق حالة الإرجاع لأمر، المتغير المقابل هو $?
وبعد بدلا من ذلك، يمكنك الدائرة القصيرة باستخدام command || exit
نصائح أخرى
echo in b
./a.sh && echo in b 2
هذا يتحقق أساسا أن البرنامج النصي الأول لا يخرج غير صفر. إذا كان هذا صحيحا، فسيحصل فقط على الوظيفة الثانية.
لا أعتقد أن هناك طريقة يمكنك القيام بها دون التحقق صراحة عن حالة إعادة الإرجاع في Subshell، على سبيل المثال:
# This will run b.sh, and if that exits with a non-zero status, we will also
# exit with that same status; otherwise, we continue.
./b.sh || echo $?
لا تنتمي إلى StackOverflow