قذيفة طومسون

كانت صدفة تومسون أول صدفة يونكس ، وقد تم تقديمها في الإصدار الأول من يونكس عام 1971، وكتبها كين تومسون . [ 1 ] كانت عبارة عن مترجم أوامر بسيط، لم يتم تصميمه لكتابة البرامج النصية، ولكنه مع ذلك قدم العديد من الميزات المبتكرة لواجهة سطر الأوامر وأدى إلى تطوير صدفات يونكس اللاحقة.

تاريخ

تم تقديم اسم "shell" لمترجم سطر الأوامر ومفهوم جعل shell برنامج مستخدم خارج نواة نظام التشغيل في نظام Multics ، وهو النظام السابق لنظام Unix .

من السمات المبكرة لصدفة تومسون وجود صيغة مختصرة لإعادة توجيه المدخلات والمخرجات . في نظام Multics، كانت إعادة توجيه مدخلات أو مخرجات أمر ما تتطلب أوامر منفصلة لبدء وإيقاف إعادة التوجيه؛ أما في يونكس، فيمكن ببساطة إضافة وسيط إلى سطر الأوامر يتكون من الرمز < متبوعًا باسم ملف للمدخلات أو الرمز > للمخرجات، وستقوم الصدفة بإعادة توجيه المدخلات والمخرجات طوال مدة تنفيذ الأمر. كانت هذه الصيغة موجودة بالفعل مع إصدار النسخة الأولى من يونكس عام 1971.

أُضيفت لاحقًا ميزة الأنابيب . وبناءً على اقتراح دوغلاس ماكلروي ، تم توسيع صيغة إعادة التوجيه بحيث يُمكن تمرير مُخرجات أمرٍ ما إلى مُدخلات أمرٍ آخر. وكانت صيغة الأنابيب الأصلية، كما هو موضح في دليل الإصدار 3، كالتالي:

الأمر 1 > الأمر 2 >

أثبتت هذه الصيغة أنها غامضة للغاية، وكان من السهل الخلط بينها وبين إعادة التوجيه إلى الملفات - فالنظام لا يستطيع التمييز بين "command2" و"command2" كملف. وبحلول الإصدار 4، تغيرت الصيغة لتستخدم الرمزين | و^ للدلالة على الأنابيب.

الأمر 1 | الأمر 2

وهذا ينتج عنه نفس النتيجة تماماً كما يلي:

الأمر 1 ^ الأمر 2

تم تغيير رمز > إلى:

الأمر 1 > الملف 1

سيؤدي هذا إلى وضع مخرجات الأمر command1 في الملف file1.

لقد أثبتت صيغة Thompson shell لإعادة التوجيه باستخدام < و > ، والتوجيه باستخدام | ، أنها متينة وتم اعتمادها من قبل معظم أنظمة Unix shells الأخرى بالإضافة إلى أنظمة تشغيل أخرى مثل MS-DOS .

تصميم

كان تصميم الصدفة بسيطًا عن قصد؛ حتى عبارات if و goto ، الضرورية للتحكم في تدفق البرنامج، تم تنفيذها كأوامر منفصلة. [ 1 ]

لا توفر واجهة سطر الأوامر أي إمكانيات للتعليقات باستثناء أمر مدمج :. يكتب المبرمجون نصًا بعد هذا الأمر، الذي يتجاهل جميع المعاملات وينفذ الأمر بنجاح. تتضمن الأوامر المدمجة الأخرى chdirو exitو loginو و و . [ 2 ]newgrpshiftwait

يجمع الأمر if بين استخدامات اختبار Bourne shell الحديث و if . يبحث الأمر أولاً عن تعبير (قد يكون مشابهًا لاختبار حديث أو يتضمن أمرًا خارجيًا)، ثم يتعامل مع بقية سطر الأوامر كأمر للتنفيذ إذا كان الشرط صحيحًا. لا يوجد فرع else . [ 3 ]

يُنفَّذ الأمر goto بطريقة مثيرة للاهتمام، فهو منفصل عن الصدفة. عند طلب الانتقال إلى "LABEL"، يبحث في ملف الأوامر الحالي عن سطر يحتوي على : LABEL(تذكر أن هذا السطر :يُتجاهل ببساطة)، ثم يخرج. عندما تحاول الصدفة قراءة سطر تالٍ، سيُوجِّهها مُعرِّف الملف المُعاد وضعه إلى الموقع المُعلَّم. [ 4 ]

لا يوجد توجيه لمُعرّفات الملفات الإضافية بخلاف المدخلات والمخرجات القياسية (0 و1) في واجهة Thompson. كما يتطلب توجيه الخطأ القياسي (مُعرّف الملف 2) برنامجًا خارجيًا مُغلّفًا fd2. [ 5 ]

يدعم الصدفة استخدام globbing، [ 2 ] ولكنه في الواقع ينفذه عن طريق تأجيله إلى globأمر يستبدل الوسائط ويستدعي الأمر المطلوب. [ 6 ]

يحتوي Thompson shell على معلمات موضعية، لكنه لا يدعم المتغيرات المسماة ولا الوصول إلى متغيرات البيئة. وهو يفهم إنشاء أوامر الخلفية باستخدام &، على غرار Bourne shell. كما يوفر إمكانية الاقتباس والهروب باستخدام الشرطة المائلة العكسية، مع العلم أن علامات الاقتباس المفردة تعمل بشكل مختلف عن Bourne shell. [ 2 ]

التراجع والاستبدال

ونتيجة للتصميم البسيط، وبحلول إصدار النسخة السادسة من يونكس عام 1975 ، أصبح من الواضح أن واجهة تومسون غير كافية لمعظم مهام البرمجة الجادة.

في ذلك الوقت، بدأ مطورو توزيعة Programmer's Workbench UNIX ، وعلى رأسهم جون ماشي ، بتعديل واجهة Thompson لجعلها أكثر ملاءمة للبرمجة. [ 1 ] وقد تضمنت النتيجة، المعروفة باسم واجهة PWB أو واجهة Mashey، آليات تحكم أكثر تطوراً في تدفق الأوامر، وقدمت متغيرات الواجهة، ولكنها ظلت محدودة بسبب ضرورة الحفاظ على التوافق مع واجهة Thompson.

أخيرًا، استُبدلت واجهة Thompson كواجهة Unix الرئيسية بواجهة Bourne في الإصدار السابع من Unix ، وبواجهة C في نظام 2BSD ، وكلاهما صدر عام 1979. ونظرًا لأن جميع أنظمة Unix الحديثة تقريبًا، والأنظمة الشبيهة بـ Unix، مُشتقة من الإصدار السابع و2BSD، فإن واجهة Thompson لم تعد تُستخدم بشكل عام. ومع ذلك، فهي متاحة كمصدر مفتوح كجزء من العديد من توزيعات مصادر Unix القديمة ، وقد نُقلت إلى أنظمة Unix الحديثة كمعروض تاريخي.

انظر أيضاً

مراجع