Bash Script - Umount A Device ، لكن لا تفشل إذا لم يتم تركيبه؟
سؤال
أنا أكتب نص باش ولدي errexit
تعيين ، بحيث يموت البرنامج النصي إذا لم يرد أي أمر على رمز خروج 0 ، أي إذا لم يكتمل أي أمر بنجاح. هذا هو التأكد من أن نص Bash الخاص بي قوي.
يجب أن أقوم بتركيب بعض أنظمة الملفات ، ونسخ بعض الملفات ، والمعمدة. أنا أضع umount /mnt/temp
في البداية بحيث ستعمل عليه قبل القيام بأي شيء. ومع ذلك ، إذا لم يتم تركيبه ، فسوف تفشل Umount ويوقف السيناريو.
هل من الممكن القيام umount --dont-fail-if-not-mounted /mnt/temp
؟ بحيث سيعود 0 إذا لم يتم تركيب الجهاز؟ مثل rm -f
?
المحلول
الخدعة القياسية لتجاهل رمز الإرجاع هي لف الأمر في تعبير منطقي يقيم دائمًا للنجاح:
umount .... || /bin/true
نصائح أخرى
على افتراض أن الخاص بك umount
إرجاع 1 عند عدم تثبيت الجهاز ، يمكنك القيام بذلك على هذا النحو:
umount … || [ $? -eq 1 ]
ثم لن يفترض باش أي خطأ إذا umount
إرجاع 0 أو 1 (أي Unmounts بنجاح أو لم يتم تثبيت الجهاز) ولكن سيوقف البرنامج النصي إذا تم إرجاع أي رمز آخر (على سبيل المثال ، ليس لديك أذونات لإلغاء تثبيت الجهاز).
لقد وجدت للتو ":" أكثر استخدامًا فول وأردت حلًا مشابهًا ولكن دع البرنامج النصي يعرف ما يحدث.
umount ...... || { echo "umount failed but not to worry" ; : ; }
هذا يعود صحيح مع الرسالة ، على الرغم من فشل umount.