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

От роду язык его не говорил «да», когда душа его чувствовала «нет» (Д.И. Фонвизин).

Что такое Subshell в Linux?

2 мин для чтения
FavoriteLoadingДобавить в избранное
1 Звезда2 Звезды3 Звезды4 Звезды5 Звезд (1 оценок, среднее: 5,00 из 5)
Загрузка...
11 февраля 2021
Что такое Subshell в Linux?
Вы уже знаете о оболочке. Это программа, которая позволяет запускать команды в Linux. Ваше основное взаимодействие с оболочкой – это когда вы запускаете команды в терминале.

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

 

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

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

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

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

echo $var

 

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

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

 

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

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

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

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

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

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

 

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

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

Читать  Как отключить службу в Ubuntu?

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

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

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

 

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

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

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

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

. script

 

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

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

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

Поделиться в соц. сетях:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest
0 комментариев
Межтекстовые Отзывы
Посмотреть все комментарии

Читайте также

0
Оставьте комментарий! Напишите, что думаете по поводу статьи.x
()
x

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

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

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

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

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

close
galka

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

close