البحث عن المفقودين
غالبًا ما تكون الأخطاء عبارة عن حالات تدفق منطقي غير متوقع داخل البرنامج النصي. وهذا يعني أن أجزاء من البرنامج النصي إما لا يتم تنفيذها مطلقًا، أو يتم تنفيذها بترتيب خاطئ أو في الوقت الخطأ. لعرض التدفق الفعلي للبرنامج، نستخدم تقنية تسمى البحث عن المفقودين.
تتضمن إحدى طرق التتبع وضع رسائل إعلامية في برنامج نصي يعرض موقع التنفيذ. يمكننا إضافة رسائل إلى جزء التعليمات البرمجية الخاص بنا:
صدى "التحضير لحذف الملفات" >&2
إذا [[-d $ dir_name]] ؛ ثم إذا كان cd $ dir_name؛ من ثم
صدى "حذف الملفات" >&2
rm *
آخر
صدى "لا يمكن cd إلى '$ dir_name'"> & 2 خروج 1
فاي آخر
صدى "لا يوجد دليل من هذا القبيل: '$ dir_name'"> & 2 خروج 1
fi
صدى "اكتمل حذف الملف" >&2
صدى "التحضير لحذف الملفات" >&2
إذا [[-d $ dir_name]] ؛ ثم إذا كان cd $ dir_name؛ من ثم
صدى "حذف الملفات" >&2
rm *
آخر
صدى "لا يمكن cd إلى '$ dir_name'"> & 2 خروج 1
فاي آخر
صدى "لا يوجد دليل من هذا القبيل: '$ dir_name'"> & 2 خروج 1
fi
صدى "اكتمل حذف الملف" >&2
نرسل الرسائل إلى الخطأ القياسي لفصلها عن الإخراج العادي. كما أننا لا نضع مسافة بادئة للأسطر التي تحتوي على الرسائل، لذا فمن الأسهل العثور عليها عندما يحين وقت إزالتها.
الآن، عند تنفيذ البرنامج النصي، من الممكن أن نرى أن حذف الملف قد تم:
[me@linuxbox ~]$deletion-script يستعد لحذف الملفات عن طريق حذف الملفات
اكتمل حذف الملف [me@linuxbox ~]$
[me@linuxbox ~]$deletion-script يستعد لحذف الملفات عن طريق حذف الملفات
اكتمل حذف الملف [me@linuxbox ~]$
يوفر bash أيضًا طريقة للتتبع، يتم تنفيذها بواسطة الخيار -x والأمر set مع الخيار -x. باستخدام برنامجنا النصي السابق للمشاكل، يمكننا تنشيط التتبع للبرنامج النصي بأكمله عن طريق إضافة خيار -x إلى السطر الأول:
#!/bin/bash -x
#!/bin/bash -x
التصحيح
# مشكلة: البرنامج النصي لتوضيح الأخطاء الشائعة رقم = 1
إذا كان [$ number = 1] ؛ من ثم
صدى "الرقم يساوي 1." آخر
صدى "الرقم لا يساوي 1."
fi
# مشكلة: البرنامج النصي لتوضيح الأخطاء الشائعة رقم = 1
إذا كان [$ number = 1] ؛ من ثم
صدى "الرقم يساوي 1." آخر
صدى "الرقم لا يساوي 1."
fi
عند التنفيذ ، تبدو النتائج كما يلي:
[me @ linuxbox ~] $ مشكلة
+ الرقم=1
+ '[' 1 = 1 ']'
+ صدى "الرقم يساوي 1." الرقم يساوي 1.
[me @ linuxbox ~] $ مشكلة
+ الرقم=1
+ '[' 1 = 1 ']'
+ صدى "الرقم يساوي 1." الرقم يساوي 1.
مع تمكين التتبع، نرى الأوامر يتم تنفيذها مع التوسعات المطبقة. تشير علامات الزائد الأمامية إلى عرض التتبع لتمييزه عن خطوط الإخراج العادية. علامة الجمع هي الحرف الافتراضي لإخراج التتبع. وهو موجود في PS4 (سلسلة المطالبة 4) متغير الصدفة. يمكن تعديل محتويات هذا المتغير لجعل المطالبة أكثر فائدة. هنا، نقوم بتعديل محتويات المتغير ليشمل رقم السطر الحالي في البرنامج النصي حيث يتم إجراء التتبع. لاحظ أن علامات الاقتباس المفردة مطلوبة لمنع التوسع حتى يتم استخدام الموجه فعليًا:
[me @ linuxbox ~] $ تصدير PS4='$LINENO +'
[me @ linuxbox ~] $ مشكلة
5 + الرقم=1
7 + '[' 1 = 1 ']'
8 + صدى "الرقم يساوي 1." الرقم يساوي 1.
[me @ linuxbox ~] $ تصدير PS4='$LINENO +'
[me @ linuxbox ~] $ مشكلة
5 + الرقم=1
7 + '[' 1 = 1 ']'
8 + صدى "الرقم يساوي 1." الرقم يساوي 1.
لإجراء تتبع على جزء محدد من البرنامج النصي، بدلا من البرنامج النصي بأكمله، يمكننا استخدام طقم الأمر مع -x الخيار:
#! / بن / باش
# مشكلة: البرنامج النصي لتوضيح الأخطاء الشائعة رقم = 1
#! / بن / باش
# مشكلة: البرنامج النصي لتوضيح الأخطاء الشائعة رقم = 1
set -x # تشغيل التتبع
إذا كان [$ number = 1] ؛ من ثم
صدى "الرقم يساوي 1." آخر
صدى "الرقم لا يساوي 1."
fi
set + x # قم بإيقاف تشغيل التتبع
set -x # تشغيل التتبع
إذا كان [$ number = 1] ؛ من ثم
صدى "الرقم يساوي 1." آخر
صدى "الرقم لا يساوي 1."
fi
set + x # قم بإيقاف تشغيل التتبع
نستخدم طقم الأمر مع -x خيار تفعيل التتبع و +x خيار إلغاء تنشيط التتبع. يمكن استخدام هذه التقنية لفحص أجزاء متعددة من البرنامج النصي المزعج.