כיצד ומדוע תשתמש משתנה SHLVL $

משתנה SHLVL $ $ משמש כדי לספר לך כמה פגזים עמוק אתה. אם אתה מבולבל על ידי זה כדאי להתחיל בהתחלה.

מה זה מעטפת?

פגז לוקח פקודות נותן להם את מערכת ההפעלה הבסיסית לבצע. על רוב המערכות לינוקס תוכנית פגז נקרא BASH (Bourne שוב Shell) אבל יש אחרים זמינים כולל C מעטפת (tcsh) ואת KORN פגז (ksh).

כיצד לגשת מעטפת לינוקס

בדרך כלל כמשתמש אתה אינטראקציה עם תוכנית פגז באמצעות תוכנית הדמיית המסוף כגון XTerm, konsole או מסוף gnome.

אם אתה מפעיל מנהל חלונות כגון Openbox או סביבת שולחן עבודה כגון GNOME או KDE, תמצא אמולטור מסוף מתפריט או מקף. במערכות רבות קיצור הדרך CTRL ALT ו- T יפתח גם חלון מסוף.

לחלופין, באפשרותך לעבור ל - Tty (teletypewriter) נוסף המספק גישה ישירה לפצצת שורת פקודה. ניתן לעשות זאת על-ידי הקשה על CTRL ALT ו- F1 או CTRL ALT ו- F2 וכו '.

מה היא רמה מעטפת

כאשר אתה מפעיל פקודה בתוך פגז הוא פועל במשהו שנקרא רמת הקליפה. בתוך פגז אתה יכול לפתוח פגז נוסף שהופך אותו subhell או פגז שפתחה אותו.

לכן, פגז ההורה ייחשב אולי לקליע של רמה 1 וקליפת הילד תהיה פגז ברמה 2.

כיצד להציג את מעטפת רמה

זה צריך לבוא בתור הפתעה על פי הכותרת של המאמר כי הדרך שבה אתה יכול לדעת איזה רמת קליפה אתה מפעיל הוא באמצעות המשתנה SHLVL $.

כדי לראות את רמת הקליפה שבה אתה משתמש כרגע הקלד את הדברים הבאים:

echo $ SHLVL

במקום זאת, אם אתה מפעיל את הפקודה הנ"ל בתוך חלון מסוף אתה עלול להיות מופתע לראות כי התוצאה החזירה היא 2.

עם זאת, אם אתה מפעיל את אותה הפקודה באמצעות tty אז התוצאה היא 1.

למה זה המקרה שאתה יכול לשאול? ובכן את סביבת שולחן העבודה אתה פועל הוא להיות מופעל על גבי פגז. פגז זה יהיה ברמה 1. כל חלון מסוף שאתה פותח מתוך סביבת שולחן העבודה צריך להיות ילד של פגז שפתחה את סביבת שולחן העבודה ולכן רמת הקליפה לא יכול להתחיל בכל מספר אחר מאשר 2.

ה- Tty אינו פועל בסביבה שולחנית ולכן הוא פשוט פגז ברמה 1.

כיצד ליצור subshells

הדרך הקלה ביותר לבחון את המושג של פגזים subshells הוא כדלקמן. פתח חלון מסוף והקלד את הפריטים הבאים:

echo $ SHLVL

כפי שאנו יודעים מחלון מסוף רמת הקליפה המינימלית היא 2.

עכשיו בתוך חלון המסוף הקלד את הדברים הבאים:

sh

הפקודה sh בעצמה מפעילה פגז אינטראקטיבי שמשמעותו שאתה משתמש פגז בתוך קליפה או subhell.

אם אתה מקליד אותה שוב:

echo $ SHLVL

תראה כי רמת קליפה מוגדר 3. הפעלת הפקודה sh מתוך subshell תפתח subshell של subshell ולכן רמת הקליפה יהיה ברמה 4.

מדוע רמת מעטפת חשוב?

רמת הקליפה חשובה כאשר חושבים על היקף המשתנים בתוך הסקריפטים שלכם.

נתחיל במשהו פשוט:

כלב = מייסי
כלב echo $

אם אתה מפעיל את הפקודה לעיל פגז מילה maisie יוצג לחלון המסוף.

פתח מעטפת חדשה על ידי הקלדת הפרטים הבאים:

sh

אם אתה מפעיל את הפקודה הזו תראה כי שום דבר לא מוחזר:

כלב echo $

הסיבה לכך היא כי משתנה הכלב $ זמין רק ברמה קליפה 2. אם אתה מקליד יציאה כדי לצאת subshell ולהפעיל הכלב echo שוב את המילה maisie יוצג שוב.

זה גם שווה לחשוב על התנהגות של משתנים גלובליים בתוך פגז.

התחל בחלון מסוף חדש והקלד את הטקסט הבא:

כלב לייצא = maisie
כלב echo $

כפי שהיית מצפה את המילה maisie מוצג. עכשיו לפתוח subshell ואת סוג echo $ כלב שוב. הפעם תראה כי המילה maisie מוצג למרות שאתה בתוך subhell.

הסיבה לכך היא כי הפקודה לייצא עשה את הכלב דולר משתנה העולמי. שינוי משתנה הכלב $ בתוך subhell גם אם אתה משתמש בפקודה לייצא אין כל השפעה על פגזים האב שלה.

יש לקוות כי זה אתה יכול לראות כי בידיעה את רמת קליפה אתה עובד יש משמעות כלשהי בעת כתיבת סקריפטים.

הדוגמאות שנתתי הן פשטניות מאוד, אבל זה די נפוץ עבור סקריפט פגז אחד לקרוא סקריפט פגז נוסף אשר בתורו קורא תסריט פגז נוסף כולם פועל עכשיו ברמות שונות. לדעת את רמת הקליפה יכול להיות חשוב מאוד.