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




