# Интерпретаторы терминала

**Окружение** — это область, которую оболочка создает каждый раз при запуске сеанса, где содержатся переменные, определяющие свойства системы.

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

Переменные окружения — это переменные, определяемые для текущей оболочки и наследуемые любыми дочерними оболочками или процессами. Переменные окружения используются для передачи информации процессам, которые запущены в оболочке.

**Оболочка** (*интерпретатор командной строки* или *shell*) - программа, которая принимает команды от пользователя и исполняет их. Кроме этого, оболочка позволяет экспортировать (`export`) переменные во (внешнее) окружение (`environment`).

![shells](img/shells.gif)

## Работа с окружением

`set` в Linux - это установка переменных окружения (environment variables), которые определяют поведение работы системы или программы. Они используются для хранения информации, такой как пути к файлам, настройки программ, язык интерфейса и другие параметры.

Например, переменная окружения `PATH` указывает системе, где искать исполняемые файлы программ. Переменные окружения могут быть установлены глобально (для всех пользователей) или только для текущей сессии.

`env` (environment) в Linux - это команда, которая выполняет указанную программу, устанавливая значения переменных окружения перед ее запуском.

Различие между `set` и `env` заключается в том, что `set` устанавливает переменные окружения только в текущей сессии или в скриптах, в которых была выполнена команда, в то время как `env` устанавливает переменные окружения для запускаемой программы и ее дочерних процессов. Это означает, что переменные окружения, установленные с помощью `env`, будут доступны всему дереву процессов, порожденных запущенной программой.

## Ссылки

- [Считывание и настройка переменных оболочки и окружения в Linux](https://www.digitalocean.com/community/tutorials/how-to-read-and-set-environmental-and-shell-variables-on-linux-ru)
- [Переменные оболочки и окружение](https://unix1.jinr.ru/oss/linux/lig/node274.html)

