Как и защо бихте използвали променливата $ SHLVL

Променливата $ SHLVL се използва, за да ви каже колко дълбоки стени сте. Ако сте объркани от това, струва си да започнете от самото начало.

Какво представлява Shell?

Една обвивка приема команди и ги дава на основната операционна система да изпълнява. На повечето Linux системи програмата shell се нарича BASH (The Bourne Again Shell), но има и други, включително C Shell (tcsh) и KORN shell (ksh).

Как да получите достъп до

Обикновено като потребител вие взаимодействате с програмата за обвивка чрез използване на програма за емулиране на терминала като XTerm, конзола или gnome-терминал.

Ако работите с мениджър на прозорци като Openbox или десктоп среда като GNOME или KDE, ще намерите емулатор на терминала от меню или от тире. На много системи, комбинацията CTRL ALT и T ще отвори и терминален прозорец.

Друга възможност е да преминете към друг tty (teletypewriter), който осигурява директен достъп до обвивката на командния ред. Можете да направите това, като натиснете CTRL ALT и F1 или CTRL ALT и F2 и т.н.

Какво е ниво на Shell

Когато изпълнявате команда в черупка, тя се изпълнява от нещо, наречено нивото на обвивката. В рамките на една черупка можете да отворите друга обвивка, която я прави подлепнал или обвивката, която я отваря.

Поради това родителската обвивка би могла да се приеме, че може би черупка от ниво 1, а детската черупка би била втора черупка.

Как да се покаже нивото на Shell

Не бива да се изненадвате въз основа на заглавието на статията, че начинът, по който можете да разберете кое ниво на черупката използвате, е чрез използването на променливата $ SHLVL.

За да видите нивото на черупката, което в момента се изпълнява, въведете следното:

echo $ SHLVL

По-интересно е, ако изпълните горната команда в терминален прозорец, може да се изненадате, че резултатът е върнат на 2.

Ако обаче изпълнявате същата команда, използвайки tty, резултатът е 1.

Защо може да поискате това? Ами работната среда, която пускате, се изпълнява върху черупката. Тази черупка ще бъде на ниво 1. Всеки терминален прозорец, който отваряте от тази работна среда, трябва да бъде дете на черупката, която е отворила работната среда и следователно нивото на черупката не може да започне с число различно от 2.

В tty не работи десктоп среда и следователно е просто ниво 1 shell.

Как да създадете подсистеми

Най-лесният начин за тестване на концепцията за черупки и подови покрития е следният. Отворете терминален прозорец и въведете следното:

echo $ SHLVL

Както знаем от терминален прозорец, минималното ниво на обвивката е 2.

Сега в рамките на терминалния прозорец въведете следното:

од

Само командата sh изпълнява интерактивна черупка, което означава, че използвате черупка в обвивка или подково.

Ако сега пишете отново:

echo $ SHLVL

Ще видите, че нивото на черупката е настроено на 3. Изпълнението на командата sh в рамките на подлеплия ще отвори подлеп на подлеплата и така нивото на черупката ще бъде на ниво 4.

Защо е важно нивото на Shell?

Нивото на черупката е важно, когато мислите за обхвата на променливите в скриптовете си.

Нека да започнем с нещо просто:

куче = Мейси
echo $ dog

Ако изпълнявате горната команда в обвивка, терминалният прозорец ще се появи на думата "maisie".

Отворете нова обвивка, като въведете следното:

од

Ако изпълнявате тази команда, ще видите, че нищо всъщност не се връща:

echo $ dog

Това е така, защото променливата $ dog е достъпна само на черупка ниво 2. Ако въведете изход, за да излезете от subshell и стартирате ехо $ куче отново, думата maisie ще се покаже отново.

Също така си струва да мислим за поведението на глобалните променливи в обвивката.

Стартирайте в нов терминален прозорец и въведете следното:

експортно куче = maisie
echo $ dog

Както бихте очаквали, думата maisie се показва. Сега отворете подлеп и отново въведете echo $ dog. Този път ще видите, че думата maisie се показва, въпреки че сте в подлеп.

Причината за това е, че командата за експортиране направи $ куче променлива глобална. Промяната на променливата за $ куче в подкласа, дори ако използвате командата за експортиране, няма влияние върху нейните родители.

Надяваме се от това да разберете, че знаейки нивото на черупката, в която работите, има известно значение при писането на скриптове.

Примерите, които дадох, са много опростени, но е съвсем нормално един скрипт на shell да нарече друг скрипт на shell, който на свой ред нарича друг скрипт на shell, който сега тече на различни нива. Познаването на нивото на черупката може да бъде много важно.