Последние новости:

Поиск по сайту:

Специалист подобен флюсу: полнота его односторонняя (К. Прутков).

Что такое Subshell в Linux?1 мин для чтения

FavoriteLoadingДобавить в избранное
11.02.2021
Что такое Subshell в Linux?

Вы уже знаете о оболочке. Это программа, которая позволяет запускать команды в Linux. Ваше основное взаимодействие с оболочкой — это когда вы запускаете команды в терминале.

Рано или поздно вы встретите термин «subshell», который может вас запутать.

 

Что такое подоболочка?

Подоболочка — это в основном новая оболочка, предназначенная только для запуска желаемой программы. Подоболочка может получить доступ к глобальным переменным, установленным «родительской оболочкой», но не к локальным переменным. Любые изменения, внесенные подоболочкой в ​​глобальную переменную, не передаются в родительскую оболочку.

Имеет ли это смысл? Возможно нет. Позвольте мне подробно объяснить вещи на примерах.

Вот однострочный сценарий, который отображает значение переменной ‘var’.

echo $var

 

Мы установили для этой переменной значение LHB, как вы думаете, что будет отображаться при запуске скрипта?

Сюрприз! Скрипт не видит значение переменной var, которую мы установили ранее.

 

Скрипты оболочки запускаются в подоболочке (по умолчанию)

Почему? Потому что, когда вы запускаете сценарий оболочки, он запускает свою собственную оболочку. Поскольку эта оболочка происходит из другой оболочки (где вы устанавливаете переменную и где запускаете скрипт), она называется подоболочкой.

Сценарий оболочки не мог увидеть значение переменной, потому что это была локальная переменная, и она не была известна только что созданной оболочке. Если вы хотите, чтобы переменная была доступна ее подоболочкам, вам придется использовать команду экспорта и превратить ее в глобальную переменную.

Вы также можете создать подоболочку, запустив новые оболочки из существующих. Просто запустите bash и вы будете в подоболочке. Вы можете использовать команду exit, чтобы закрыть/выйти из оболочки и вернуться к исходной оболочке.

Не думайте о подоболочке как о новом окне терминала. Мы знаем, что это сложно визуализировать, но это так.

Читать  Передайте именованный аргумент в сценарии Bash

Мы использовали переменную, чтобы показать разницу между двумя оболочками (родительской и подоболочкой). В этом случае переменная var не была экспортирована и, следовательно, не была известна подоболочке.

 

Вложенные подоболочки

Таким же образом можно создавать и вложенные подоболочки. После экспорта переменной она остается экспортированной во все созданные впоследствии подоболочки.

Вы можете изменить значение экспортируемой переменной в подоболочке. Измененное значение будет передано в последующие подоболочки (поскольку сама переменная является глобальной), но если вы выйдете из нее и вернетесь в исходную оболочку, исходное значение будет сохранено.

Почему? Поскольку значение экспортируемой переменной копируется в подоболочку. И это копия, которая изменена (с LHB на HOC). Исходное значение остается прежним в родительской оболочке.

Так что имейте в виду, что невозможно изменить значение переменной в родительской оболочке из подоболочки. Неважно, экспортируете вы переменную или нет, переменная не будет изменена в родительской оболочке.

 

Дополнительный совет: выполните сценарий оболочки в текущей оболочке

Нормальным поведением является то, что сценарий оболочки выполняется в собственной оболочке, т. е. в подоболочке.

Вы можете изменить это поведение и запустить сценарий оболочки в текущей оболочке благодаря встроенной команде оболочки под названием точка (.).

Нет, это не то же самое, что запускать сценарий оболочки вроде этого ./script. Вместо этого вы запускаете его так:

. script

 

Таким образом, команды из сценария выполняются текущей оболочкой, как если бы они были введены в терминал, а не выполнялись через сценарий в подоболочке. Таким образом скрипты могут получить доступ к локальным переменным.

Мы думаем, что это достаточно хорошая информация о подоболочке в Linux.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...
Поделиться в соц. сетях:

0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

**ссылки nofollow

0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии

Это может быть вам интересно

Статьи партнеров:

Рекомендуемое
Хотите, чтобы ваши дети собрали компьютер? Или научиться программировать в раннем…
0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам:

Заполните форму и наш менеджер перезвонит Вам в самое ближайшее время!

badge
Обратный звонок 1
Отправить

Спасибо! Ваша заявка принята

close

Спасибо! Ваша заявка принята

close