Команда «.» (точка) или source

08.04.2018

Теги: BashCLILinuxКомандаОкружение

Команда «.» (точка) — это синоним команды source, встроенной в оболочку. Часто используется для включения внешних файлов внутри сценария. Рассмотрим в чём заключается суть такого включения на примере файла .bash_profile:

if [ -f ~/.bashrc ] ; then
    . ~/.bashrc
fi

На второй строчке с помощью оператора «.» выполняется содержимое файла ~/.bashrc. Возникает вопрос, почему нельзя обойтись без точки?

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

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

Действие, когда какая либо команда или сама командная оболочка инициирует (порождает) новый подпроцесс, чтобы выполнить какую либо работу, называется ветвлением (forking) процесса. Новый процесс называется «дочерним» (или «потомком»), а породивший его процесс — «родительским» (или «предком»). В результате и потомок и предок продолжают исполняться одновременно — параллельно друг другу.

Проиллюстрируем сказанное на простом примере. Создадим файл test.sh следующего содержания:

var="Какое-то значение"
echo "Внутренняя переменная var = $var"

Если теперь запустить скрипт, то на экран будет выведено значение внутренней переменной скрипта var:

$ ./test.sh
Внутренняя переменная var = Какое-то значение

Однако эта переменная не сохранится после завершения работы скрипта и не будет присутствовать в окружении текущей оболочки:

$ echo :$var:
::

Если же запустить скрипт с использованием точки, то он выполнится с тем же результатом. Только переменная var будет доступна среди переменных окружения текущей оболочки:

$ . ./test.sh
Внутренняя переменная var = Какое-то значение
$ echo :$var:
:Какое-то значение:

Дочерняя копия оболочки при использовании точки создаётся только в том случае, когда процесс запускается в фоновом режиме. Это единственное исключение из общего правила.

Поиск: Bash • CLI • Linux • source • Команда • Окружение • Точка

Каталог оборудования
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Производители
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
Функциональные группы
Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.