Як і чаму вы павінны выкарыстоўваць $ SHLVL Variable

Зменная $ SHLVL выкарыстоўваецца, каб сказаць вам, колькі снарадаў глыбока вы. Калі вы збянтэжаныя гэтага варта пачаць з самім пачаткам.

Што такое Shell?

Абалонка прымае каманды і перадае іх базавую аперацыйную сістэму для выканання. У большасці сістэм Linux праграмная абалонка называецца BASH (The Bourne Again Shell), але ёсць і іншыя, даступныя уключаючы C Shell (Tcsh) і абалонкі Korn (КШ).

Як атрымаць доступ да Linux Shell

Наогул , як карыстальнік вы ўзаемадзейнічаеце з праграмай абалонкі праз выкарыстанне эмуляцыі тэрмінала праграмы , такія як XTerm, Konsole або гном-тэрмінал.

Калі вы працуеце менеджэр вокнаў, такі як Openbox або асяроддзе працоўнага стала, такія як GNOME ці KDE вы можаце знайсці эмулятар тэрміналу небудзь з меню або ціра. У многіх сістэмах ярлык CTRL ALT і T адкрыецца акно тэрміналу, а таксама.

У якасці альтэрнатывы вы можаце пераключыцца на іншую TTY (тэлетайп), які забяспечвае прамы доступ да каманднага радка абалонцы. Вы можаце зрабіць гэта, націснуўшы CTRL ALT і F1 або CTRL ALT і F2 і г.д.

Што такое Shell Level

Пры выкананні каманды ў абалонцы ён працуе на тое, што называецца узроўнем абалонкі. Усярэдзіне корпуса вы можаце адкрыць яшчэ адну абалонку, што робіць яго подоболочку або абалонку, якая адкрыла яго.

Таму бацькоўская абалонка будзе лічыцца, магчыма, узровень 1 абалонкі і дзіця абалонка будзе ўзровень 2 абалонкі.

Як паказваюць узровень Shell

Ён павінен прыйсці, як не дзіўна, на аснове назвы артыкула пра тое, што, як вы можаце сказаць, які ўзровень абалонкі вы працуеце ў бок, з дапамогай зменнай $ SHLVL.

Каб убачыць ўзровень абалонкі, які вы ў цяперашні час працуе ў тыпе наступнае:

Рэха $ SHLVL

Хутчэй цікава, калі вы запускаеце вышэйпаказаную каманду ўнутры акна тэрмінала вы можаце быць здзіўлены, каб убачыць, што вынік Вяртаецца 2.

Аднак, калі вы выканаць тую ж каманду, выкарыстоўваючы тэлетайп, то вынік будзе 1.

Чаму гэта так, вы маглі б спытаць? Ну асяроддзя працоўнага стала вы працуеце ў цяперашні час працуюць на верхняй частцы корпуса. Гэта абалонка будзе ўзровень 1. Любое акно тэрмінала вы адкрываць у гэтым асяроддзі працоўнага стала павінен быць дзіцем абалонкі, які адкрыў працоўнае асяроддзе і, такім чынам, узровень абалонкі не можа пачынацца з любога ліку, акрамя 2.

Тэрмінал не працуе асяроддзе працоўнага стала, і таму проста узровень 1 абалонка.

Як стварыць Подоболочки

Самы просты спосаб праверыць канцэпцыю абалонак і подоболочек заключаецца ў наступным. Адкрыйце акно тэрмінала і ўвядзіце наступную каманду:

Рэха $ SHLVL

Як мы ведаем з акна тэрмінала мінімальны ўзровень абалонкі 2.

Зараз у акне тэрмінала ўвядзіце наступную каманду:

ш

Каманда ш сама па сабе запускае інтэрактыўную абалонку, якая азначае, што вы карыстаецеся абалонку ўнутры абалонкі або подоболочки.

Калі зараз ўвесці гэта зноў:

Рэха $ SHLVL

Вы ўбачыце, што ўзровень абалонкі усталёўваецца на 3. Выкананне каманды ш ўнутры субоболочке адкрые подоболочку подоболочки і таму ўзровень абалонкі будзе на ўзроўні 4.

Чаму Узровень Shell Важна?

Ўзровень абалонкі важна, калі гаворка ідзе пра бачнасці зменных у сцэнарах.

Давайце пачнем з чагосьці простага:

сабака = Мэйз
Рэха $ сабака

Калі вы запускаеце вышэйпаказаную каманду ў абалонцы слова Мэйс будзе адлюстроўвацца ў акне тэрмінала.

Адкрыйце новую абалонку, увёўшы наступнае:

ш

Калі вы запусціце гэтую каманду, вы ўбачыце, што нічога фактычна не вярнуўся:

Рэха $ сабака

Гэта адбываецца таму, што зменная $ сабака даступная толькі на ўзроўні абалонкі 2. Калі тып выхаду, каб выйсці з подоболочку і запусціць рэха $ сабака зноў слова Мэйс будзе адлюстроўвацца зноў.

Таксама варта падумаць аб паводзінах глабальных зменных ўнутры абалонкі.

Пачынаюцца ў новым акне тэрмінала і ўвядзіце наступную каманду:

экспарт сабака = Мэйз
Рэха $ сабака

Як і варта было чакаць, адлюстроўваецца слова Мэйз. Цяпер адкрыйце подоболочку і зноў увядзіце рэха $ сабакі. На гэты раз вы ўбачыце, што слова Мэйс адлюстроўваецца, нават калі вы ў субоболочке.

Прычына гэтага заключаецца ў тым, што каманда экспарту зрабіла $ сабакі зменнай глабальнай. ня Змена зменнай сабакі $ у субоболочке, нават калі вы выкарыстоўваеце каманду экспарту не ўплывае на яго бацькоўскіх абалонках.

Спадзяюся, з гэтага відаць, што, ведаючы ўзровень абалонкі вы працуеце ў мае некаторы значэнне пры напісанні скрыптоў.

Прыклады я даў вельмі спрошчана, але гэта даволі часта для адзін скрыпт для выкліку іншы сцэнар, які ў сваю чаргу, выклікае іншы сцэнар, усе яны ў цяперашні час працуе на розных узроўнях. Ведаючы ўзровень абалонкі можа быць вельмі важным.