كيفية الخروج من جميع البرامج النصية للاتصال في باش؟

StackOverflow https://stackoverflow.com/questions/2216200

  •  19-09-2019
  •  | 
  •  

سؤال

دعنا نقول أن لدي البرامج النصية التالية

رماد

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 $?
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top