تنفيذ الأوامر في Bash
عام
تحدد bash نوع البرنامج الذي يتم تنفيذه، وتكون البرامج هنا عادة أوامر للنظام في صورة مُجمّعة (compiled) على جهازك. وحين يتم تنفيذ أحد تلك البرامج، فإن bash تنشئ نسخة من نفسها، وتولد عملية جديدة بناء على ذلك، ويدعى ذلك الإجراء بالاشتقاق (forking). وتلك العملية الفرعية لديها نفس بيئة العملية الأصلية، ولا تختلفان إلا في رقم معرّف العملية (Process ID Number) لكل منهما.
وتحِل بيانات العملية الجديدة محِل مساحة العنوان (address space) بعد الاشتقاق ، ويتم ذلك الإجراء من خلال استدعاءٌ من exec
للنظام، حيث تستبدل آلية fork-exec الأمر الجديد بالقديم، مع بقاء البيئة التي سيتم تنفيذ البرنامج الجديد فيها كما هي، بما في ذلك إعدادات أجهزة الإدخال والإخراج، وأولوية البيئة ومتغيراتها.
وتُستخدَم تلك الآلية في إنشاء كل عمليات نظام يونكس لذا فإنه صالح للتطبيق في نظام لينكس أيضًا، لدرجة أن العملية الأولى init
التي تحمل المعرّف 1 هي عملية مشتقة أثناء الإقلاع فيما يسمّى إجراء bootstrapping.
الأوامر المُضمَّنة في الصدَفة
توجد الأوامر المُضمَّنة (built-in commands) داخل الصدفة نفسها، وحين يُستخدم اسم الأمر المُضمَّن كأول كلمة في أمر بسيط (simple command) فإن الصدفة تنفّذ الأمر مباشرة دون إنشاء عملية جديدة. وتلك الأوامر المُضمَّنة ضرورية لتطبيق وظائف يستحيل أو يصعب الحصول عليها باستخدام أدوات منفصلة.
تدعم Bash ثلاثة أنواع من الأوامر المُضمَّنة:
- أوامر صدفة بورن المُضمَّنة -وهي صدفة sh الأولى-:
:, ., break, cd, continue, eval, exec, exit, export, getopts, hash, pwd, readonly, return, set, shift, test, [, times, trap, umask, unset.
- أوامر صدفة Bash المُضمَّنة:
alias, bind, builtin, command, declare, echo, enable, help, let, local, logout, printf, read, shopt, type, typeset, ulimit, unalias.
- الأوامر الخاصة المُضمَّنة: حين تُنفِّذ Bash الأوامر في وضع POSIX، تختلف الأوامر الخاصة المُضمَّنة عن الأوامر المُضمَّنة العادية في ثلاثة أمور:
- تظهر الأوامر الخاصة المُضمَّنة قبل وظائف الصدفة أثناء البحث في الأوامر.
- إن أعطى أحدُ الأوامر الخاصة خطأً فإنه يغلق صدَفة غير تفاعلية.
- تظل عبارات المهام التي تسبق الأمر فعّالة في بيئة الصدفة بعد تنفيذ الأمر.
وأوامر POSIX الخاصة المُضمَّنة هي:
:, ., break, continue, eval, exec, exit, export, readonly, return, set, shift, trap, unset.
وستُناقّش أغلب تلك الأوامر في الفصول التالية، أما ما لن نتعرض له فإننا نرجع إلى صفحات info.
تنفيذ البرامج من شيفرة نصية
حين يكون البرنامج الذي يتم تنفيذه شيفرة نصية فإن bash تنشئ عملية مشتقة جديدة (fork)، وتقرأ الصدفة الفرعية (subshell) الأسطر من الشيفرة النصية سطرًا سطرًا، وتُقرأ الأوامر في كل سطر وتُفسَّر وتُنفَّذ كما لو أنها كُتبت مباشرة من لوحة المفاتيح. ثم تنتظر الصدفةُ الأصلية حتى تعالج الصدفةُ الفرعية أسطر الشيفرة وتنتهي من تنفيذها كلها وتُغلق نفسها، وعندها تنشط الصدفة الأصلية وتعرض محثًّا جديدًا.