محتويات الدورة

Bash / المتقدم: القنوات والتزامن وتصميم واجهة قابلة للصيانة / الدرس 13

التحكم في الواصفات وعمر التوجيه

عامل التوجيه عمليات واصفات مرتبة وافصل البيانات والتشخيص وأغلق الديناميكي المملوك.

وقت القراءة التقريبي: 3 دقيقةتاريخ مراجعة المحتوى
في هذه الصفحة

أهداف الدرس

  • توقع النسخ والتوجيه من اليسار لليمين.
  • تمييز واصفات الأمر من exec المستمرة.
  • اختيار عقود آمنة للمستند والملكية.

تعرف الواصفات قنوات مفتوحة

للإدخال والخرج والخطأ 0 و1 و2. يغير التوجيه الاتصال قبل التنفيذ وينسخ النسخ الاتصال الحالي لا وعد اتباع تعديل لاحق. لذلك يختلف >file 2>&1 وعكسه. اقرأ يساراً ليمين وارسم الاتصالات. للأنبوب ترتيب موثق مع توجيه المرحلة فلا تستنتج من قرب الرموز.

يجعل exec التوجيه مستمراً بالصدفة

يلزم توجيه الأمر استدعاءه عادة، ويغير exec دون أمر واصفات الحالية حتى الإعادة أو الإغلاق. قد تؤثر مكتبة بعد رجوعها. فضل مجموعة محدودة أو واصفاً إضافياً مملوكاً واحفظ المطلوب قبل الاستبدال. لا تفترض فراغ رقم عال؛ تتيح Bash تخصيصاً ديناميكياً بالنسخ الداعمة.

bash فتح واصف خاص وإغلاقه
lab=$(mktemp -d)
exec {out}>"$lab/note.txt"
printf '%s\n' 'synthetic note' >&"$out"
exec {out}>&-
cat -- "$lab/note.txt"
الناتج المتوقع
synthetic note

ينشئ المثال ملفه المؤقت ويكتب عبر المخصص ويغلقه ويقرأ المصطنع دون إعداد المضيف.

اختيار توسعة المستند هنا عمداً

يمنع فاصل مقتبس التوسعة بالمحتوى فيفيد القوالب بالدولار والاقتباس الخلفي. يسمح غيره بتوسعات قد تقحم الحالة. يزيل <<- علامات tab البادئة لا كل المسافات. تضيف here-string في Bash سطراً فلا تساوي البايتات الأصلية. اختر لعقد المستهلك ولا تحول القالب لشيفرة خفية.

حفظ قناة تشخيص مستقرة

قد يحتاج منتج آلي قناة تقدم مستقلة. يحفظ نسخ الخرج الأصلي اتصالاً أثناء توجيه مجموعة أخرى أو استخدم الخطأ بالعقد. لا تمزج للتسهيل دون فهم المستهلك. قد يبقي واصف موروث أنبوباً مفتوحاً ويؤخر EOF فأغلق غير اللازم بالأبناء. العمر جزء الإكمال لا التنسيق فقط.

bash التحقق من القنوات المنفصلة بمثبتات خاصة
lab=$(mktemp -d)
{ printf 'data\n'; printf 'diagnostic\n' >&2; } >"$lab/out" 2>"$lab/err"
printf 'stdout=<%s> stderr=<%s>\n' "$(cat "$lab/out")" "$(cat "$lab/err")"
الناتج المتوقع
stdout=<data> stderr=<diagnostic>

يقتصر التوجيه على المجموعة وحذف الجديد مقصود لمقارنة السطر المصطنع.

قد يفشل فتح القناة قبل العمل

تفتح الصدفة الوجهة قبل التنفيذ وقد يمنع الفشل العمل أو يقتطع > قبل القراءة. لا تقرأ وتوجه للمسار نفسه. استخدم وجهة مملوكة منفصلة وتحقق وانشر بعملية مراجعة مناسبة. عالج فشل التخصيص والكتابة واختبر وجهة غير متاحة بمثبت خاص وعدم قبول الجزئي.

الأخطاء الشائعة وإصلاحها

عدم وصول القناتين للملف المتوقع

لماذا يحدث؟
حدث النسخ قبل الاستبدال المقصود.
كيف تصلحه؟
اقرأ بالترتيب واختبر منفصلين.
كيف تتجنب تكراره؟
احفظ رسماً للقنوات المعقدة.

توجيه مساعد لمستدعيه دائماً

لماذا يحدث؟
غير exec الحالية دون إعادة.
كيف تصلحه؟
حد التوجيه أو أعد المحفوظ.
كيف تتجنب تكراره؟
وثق آثار الواصفات بالدوال.

فراغ ملف الإدخال

لماذا يحدث؟
اقتطع التوجيه المصدر أولاً.
كيف تصلحه؟
استخدم وجهة منفصلة ونسخة مصدر.
كيف تتجنب تكراره؟
قارن المسارين قبل التحويل.

اختبر فهمك

1. اشرح 2>&1 >out بنسخ الواصفات.

اعرض الحل المشروح

ينسخ الخطأ اتصال الخرج الحالي ثم ينتقل الخرج للملف ويبقى الخطأ بالأقدم. يلزم توجيه الملف قبل نسخ 1 لإرسالهما إليه.

2. لماذا ينتظر القارئ بعد انتهاء الكاتب المقصود؟

اعرض الحل المشروح

قد يبقى طرف كتابة موروث بابن. يحتاج EOF إغلاق كل المعني؛ تتبع الملكية وأغلق غير المستخدم لا تعتبر المهلة خطأ محلل عشوائياً.

أهم ما تعلمته

  • عامل التوجيه عمليات اتصال مرتبة.
  • امتلك وحد وأغلق الواصفات صراحة.

المراجع الرسمية