كيف ولماذا كنت ستستخدم المتغير SHLVL $

يتم استخدام المتغير SHLVL $ لإخبارك بعدد القذائف العميقة. إذا كنت مرتبكًا بهذا ، فمن الجدير بالبدء في البداية.

ما هو شل؟

يأخذ shell الأوامر ويمنحها لنظام التشغيل الأساسي المراد تنفيذه. في معظم أنظمة Linux ، يطلق على برنامج shell اسم BASH (The Bourne Again Shell) ، ولكن هناك برامج أخرى متاحة بما في ذلك C Shell (tcsh) و KORN shell (ksh).

كيفية الوصول إلى شل لينكس

بشكل عام كمستخدم تتفاعل مع برنامج shell من خلال استخدام برنامج مضاهاة المحطة الطرفية مثل XTerm أو konsole أو gnome-terminal.

إذا كنت تقوم بتشغيل مدير نوافذ مثل Openbox أو بيئة سطح مكتب مثل GNOME أو KDE ، فستجد محاكي طرفي إما من قائمة أو شرطة. في العديد من الأنظمة ، سيؤدي الاختصار CTRL ALT و T إلى فتح نافذة طرفية أيضًا.

بدلا من ذلك يمكنك التبديل إلى tty آخر (teletypewriter) الذي يوفر الوصول المباشر إلى قذيفة سطر الأوامر. يمكنك القيام بذلك عن طريق الضغط على CTRL ALT و F1 أو CTRL ALT و F2 إلخ.

ما هو مستوى شل

عند تشغيل أمر في shell ، يتم تشغيله في شيء يسمى مستوى shell. داخل صدفة يمكنك فتح قذيفة أخرى مما يجعلها subshell أو قذيفة التي فتحت عليه.

لذلك قد تعتبر shell الأصل shell المستوى 1 ويكون shell التابعة shell shell 2.

كيف لعرض مستوى شل

يجب أن لا يكون مفاجئًا استنادًا إلى عنوان المقالة أن الطريقة التي يمكنك بها معرفة مستوى shell الذي تقوم بتشغيله هو باستخدام متغير SHLVL $.

لمشاهدة مستوى shell الذي تقوم بتشغيله حاليًا ، اكتب ما يلي:

صدى دولار SHLVL

بل من المثير للاهتمام إذا قمت بتشغيل الأمر المذكور أعلاه داخل نافذة طرفية قد تفاجأ عندما ترى أن النتيجة التي يتم إرجاعها هي 2.

إذا قمت بتشغيل نفس الأمر باستخدام tty ، فستكون النتيجة 1.

لماذا هذه هي الحالة التي قد تسألها؟ يتم تشغيل بيئة سطح المكتب التي تقوم بتشغيلها أعلى shell. هذا shell سيكون المستوى 1. يجب أن تكون أي نافذة طرفية تفتحها من بيئة سطح المكتب هذه طفلاً للقشرة التي فتحت بيئة سطح المكتب ، وبالتالي لا يمكن أن يبدأ مستوى shell عند أي رقم غير 2.

إن tty لا يشغل بيئة سطح مكتب وبالتالي فهو ببساطة عبارة عن غلاف من المستوى 1.

كيفية إنشاء Subshells

أسهل طريقة لاختبار مفهوم قذائف وقذائف هو على النحو التالي. افتح نافذة طرفية واكتب ما يلي:

صدى دولار SHLVL

كما نعلم من نافذة طرفية ، فإن مستوى الصدفة الأدنى هو 2.

الآن داخل النافذة النهائية اكتب ما يلي:

ش

يعمل الأمر sh بمفرده على shell التفاعلي مما يعني أنك تستخدم shell داخل غلاف أو قشرة فرعية.

إذا كتبت الآن هذا مرة أخرى:

صدى دولار SHLVL

سترى أنه تم تعيين مستوى shell إلى 3. تشغيل أمر sh من داخل subshell سيتم فتح subshell من subshell بحيث يكون مستوى shell في المستوى 4.

لماذا مستوى شل مهم؟

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

لنبدأ بشيء بسيط:

كلب = maisie
صدى $ كلب

إذا قمت بتشغيل الأمر المذكور أعلاه في shell ، فسيتم عرض كلمة maisie في النافذة الطرفية.

افتح غلافًا جديدًا بكتابة ما يلي:

ش

إذا قمت بتشغيل هذا الأمر سترى أنه لم يتم إرجاع أي شيء فعليًا:

صدى $ كلب

وذلك لأن متغير الكلب $ متاح فقط على مستوى shell 2. إذا قمت بكتابة exit للخروج من subshell وتشغيل echo $ dog مرة أخرى سيتم عرض كلمة maisie مرة أخرى.

من المفيد أيضًا التفكير في سلوك المتغيرات العالمية داخل القشرة.

ابدأ في نافذة طرفية جديدة واكتب ما يلي:

كلب التصدير = مايزي
صدى $ كلب

كما تتوقع أن يتم عرض كلمة maisie. الآن افتح a Subshell واكتب صدى $ كلب ثانية. في هذه المرة سترى أن كلمة maisie معروضة على الرغم من أنك في subshell.

السبب في ذلك هو أن أمر التصدير جعل متغير الكلب $ عامًا. تغيير متغير الكلب $ داخل الفرعية حتى إذا كنت تستخدم الأمر التصدير له تأثير على shell الأصل.

نأمل من هذا يمكنك أن ترى أن معرفة مستوى shell الذي تعمل فيه له بعض الأهمية عند كتابة النصوص.

الأمثلة التي قدمتها مبسطة جداً ولكن من الشائع تماماً أن يقوم برنامج نصي واحد بقراءة نص برمجي آخر خاص بالأصداف ، والذي بدوره يستدعي سكريبت shell آخر كلهم ​​يعملون الآن على مستويات مختلفة. معرفة مستوى القشرة يمكن أن يكون مهم جدا.