Переменная $ SHLVL сообщает вам, сколько у вас глубоких оболочек. Если вас это смущает, стоит начать с самого начала.
Что такое оболочка?
Оболочка принимает команды и выдает эти команды на основной операционной системы для выполнения. В большинстве систем Linux программа оболочки называется BASH (оболочка Bourne Again), но есть и другие, включая оболочку C (tcsh) и оболочку KORN (ksh).
Как получить доступ к оболочке Linux
Обычно пользователь как пользователь взаимодействует с программой оболочки через программу эмуляции терминала, такую как XTerm , konsole или gnome-терминал.
Если вы запустите менеджер окон, такой как Openbox, или среду рабочего стола, такую как GNOME или KDE , вы найдете эмулятор терминала из меню или из тире. Во многих системах сочетание клавиш CTRL + ALT + T открывает окно терминала.
Кроме того, вы можете переключиться на другой TTY (телетайп), который обеспечивает прямой доступ к оболочке командной строки. Вы можете сделать это, нажав CTRL + ALT + F1 или CTRL + ALT + F2 .
Что такое уровень оболочки?
Когда вы запускаете команду в оболочке, она запускается на уровне оболочки. Внутри оболочки вы можете открыть другую оболочку, что делает ее подоболочкой оболочки, открывшей ее. Поэтому родительская оболочка считается оболочкой уровня 1, а дочерняя оболочка — оболочкой уровня 2.
Как отобразить уровень оболочки
Чтобы определить, на каком уровне оболочки вы работаете, используйте переменную $ SHLVL. Чтобы увидеть уровень оболочки, на котором вы в данный момент работаете, введите следующее:
echo $ SHLVL
Когда вы запускаете вышеупомянутую команду в окне терминала, возвращаемый результат равен 2. Если, однако, вы запускаете ту же команду, используя tty, то результат равен 1. tty не запускает среду рабочего стола и является уровнем 1 оболочка.
Почему это так? Среда рабочего стола, которую вы используете, запускается поверх оболочки. Эта оболочка является уровнем 1. Любое окно терминала, которое вы открываете из этой среды рабочего стола, является дочерним элементом оболочки, которая открыла среду рабочего стола. Поэтому уровень оболочки не может начинаться с любого числа, кроме 2.
Как создать подоболочки
Самый простой способ проверить концепцию оболочек и подоболочек заключается в следующем. Откройте окно терминала, затем введите следующее:
echo $ SHLVL
Когда вы запускаете эту команду из окна терминала, минимальный уровень оболочки равен 2.
Введите следующее в окне терминала:
ш
Команда sh запускает интерактивную оболочку. Это означает, что вы используете оболочку внутри оболочки или подоболочку.
Если вы введете это снова:
echo $ SHLVL
Вы видите, что уровень оболочки установлен на 3. Выполнение команды sh из подоболочки открывает подоболочку подоболочки, поэтому уровень оболочки находится на уровне 4.
Почему важен уровень Shell?
Уровень оболочки важен, когда вы думаете о области действия переменных в ваших скриптах. Для простого примера:
собака = мейзи
эхо $ собака
Если вы запустите указанную выше команду в оболочке, в окне терминала появится слово maisie .
Чтобы открыть новую оболочку, введите следующее:
ш
Когда вы запустите эту команду, вы увидите, что ничего не возвращается:
эхо $ собака
Это потому, что переменная $ dog доступна только на уровне оболочки 2. Если вы наберете команду exit, чтобы выйти из подоболочки и снова запустите echo $ dog, снова появится слово maisie .
Также стоит подумать о поведении глобальных переменных внутри оболочки.
Откройте новое окно терминала, затем введите следующее:
собака экспорта = мэйси
эхо $ собака
Как и ожидалось, слово maisie отображается. Затем откройте подоболочку и снова введите echo $ dog . На этот раз слово maisie отображается, даже если вы находитесь в недолговечке. Причина этого в том, что команда export сделала переменную $ dog глобальной. Изменение переменной $ dog в подоболочке, даже если вы используете команду export, не влияет на ее родительские оболочки.
Знание уровня оболочки, в которой вы работаете, имеет значение при написании скриптов. Примеры в этой статье просты, но один сценарий оболочки обычно вызывает другой сценарий оболочки, который, в свою очередь, вызывает другой сценарий оболочки. Все они работают на разных уровнях. Знание уровня оболочки важно.